На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Организуем VBA-FAQ! Если у Вас есть предложения, выскажитесь здесь: Пишем FAQ, интересно Ваше мнение
Популярные разделы FAQ:    user posted image Общие вопросы    user posted image Особенности VBA-кода    user posted image Оптимизация VBA-кода    user posted image Полезные ссылки

1. Старайтесь при создании темы указывать в заголовке или теле сообщения название офисного приложения и (желательно при работе с Office 95/97/2000) его версию. Это значительно сократит количество промежуточных вопросов.
2. Формулируйте вопросы как можно конкретнее, вспоминая (хотя бы иногда) о правилах ВЕЛИКОГО И МОГУЧЕГО РУССКОГО ЯЗЫКА, и не забывая, что краткость - сестра таланта.
3. Не забывайте использовать теги [сode=vba] ...текст программы... [/code] для выделения текста программы подсветкой!
4. Темы с просьбой выполнить какую-либо работу полностью за автора здесь не обсуждаются и переносятся в раздел ПОМОЩЬ СТУДЕНТАМ.
Модераторы: Old Bat, MIF
  
> Excel 2007, как проверить что комментарий существует?
    На 1С через COM взаимодействую с Excel 2007.
    Так создаю комментарий к ячейке: Cells(х, у).AddComment();
    Так получаю текст: текст = Cells(х, у).Comment.text();
    Так передаю: Cells(х, у).Comment.text(Текст);

    А как проверить что у ячейки нет комментария и его нужно создавать?

    Этот код вылетит с ошибкой : текст = Cells(х, у).Comment.text();, т.к. комментария нет, нет и текста.
      Цитата ^D^ima @
      Этот код вылетит с ошибкой : текст = Cells(х, у).Comment.text();, т.к. комментария нет, нет и текста.

      Вы же сами ответили на свой вопрос... или я не так его понял?

      Если при чтении вылетает ошибка - это то от чего можно отталкиваться, делайте On Error GoTo ErrHandler и по метке ErrHandler ловите отсутствующий комментарий.

      VB я практически забыл, но, суть примерно такая:
      ExpandedWrap disabled
        Function IsExistComment(x As Integer, y As Integer) As Bool
            On Error GoTo ErrHandler
                dim text as String
                text = Cells(х, у).Comment.text()
                IsExistComment = true
                Exit Function
            ErrHandler:
                IsExistComment = false
        End Function
      Сообщение отредактировано: VisualProg -
        Возможно как-то можно кроме обработки исключения сделать проверку?
          Коллекция комментариев - увы, убогенькая... так что, в зависимости от того, что реально нужно, ловите и обрабатывайте либо ошибку чтения несуществующего комментария, либо ошибку создания уже существующего.
            Akina, ясно, спасибо.
              А у меня получилось без генерации ошибки.
              ExpandedWrap disabled
                Option Explicit
                 
                Private Sub Test()
                 
                Dim rng As Range
                Set rng = Cells(2, 2)
                 
                If CommentsExist(Sheet1, rng) Then
                    MsgBox "The range has a comment."
                Else
                    MsgBox "The range does not have a comment."
                End If
                 
                End Sub
                 
                Private Function CommentsExist(sht As Worksheet, pRng As Range) As Boolean
                 
                Dim cs As Comments
                Dim c As Comment
                Dim I As Long
                Dim rng As Range
                 
                Set cs = sht.Comments
                 
                For I = 1 To cs.Count
                    Set c = cs(I)
                    Set rng = c.Parent
                    If rng.row = pRng.row And rng.column = pRng.column Then
                        CommentsExist = True
                        Exit For
                    End If
                Next I
                 
                End Function


              В коде сравнения есть баг "Некорректный результат для комментария на несколько ячеек. Но ето ты сам выпиливай.

              Добавлено
              Зы: писал в Excel 2019. Надеюсь, что в 2007 он работает.
                Цитата MIF @
                писал в Excel 2019

                Гость из будущего?

                Цитата MIF @
                В коде сравнения есть баг "Некорректный результат для комментария на несколько ячеек.

                Это в каком случае? к диапазону более чем из одной ячейки коммент не прикрутишь, а для поиска в диапазоне выполняется проверка для левоверхней ячейки, что в общем логично - если надо найти все, во внешнем поиске надо в явном виде вертеть ForEach.
                  Цитата Akina @
                  к диапазону более чем из одной ячейки коммент не прикрутишь,

                  В 2019 - прикручивается.
                    Цитата MIF @
                    В 2019 - прикручивается.

                    Ну тогда, в зависимости от того, что требуется, либо ForEach по обоим Range, либо тестить Range(Split(incomeRange.Address, ":")(0)).
                      ^D^ima, Проверить наличие комментария можно так :

                      ExpandedWrap disabled
                        If Not Cells(х, у).Comment Is Nothing Then
                           MsgBox "Есть примечание"
                        Else
                           MsgBox "Примечание изволит отсутствовать"
                        End If


                      Но можно обойтись и без проверки, если просто предварительно удалять примечание, т.е.

                      ExpandedWrap disabled
                        Cells(х, у).ClearComments
                        Cells(х, у).AddComment


                      А если от комментария Вам нужен только текст, то :

                      ExpandedWrap disabled
                        Cells(x, y).NoteText "Новый текст комментария"
                        pashulka
                        Попробую, спасибо. Удалять нельзя, т.к. нужно добавлять к существующему комментарию текст и стало быть если нет комментария, добавить
                          Цитата ^D^ima @
                          Удалять нельзя, т.к. нужно добавлять к существующему комментарию текст и стало быть если нет комментария, добавить

                          Ну тогда можно вывернуться по типу

                          ExpandedWrap disabled
                            NewText = IIf(Cells(x, y).Comment Is Nothing, "", Cells(x, y).Comment.Text & vbNewLine) & "Дополнение к комментарию"
                            Cells(х, у).ClearComments
                            Cells(х, у).AddComment NewText
                            ^D^ima, Если удалять нельзя, то можно и так :

                            ExpandedWrap disabled
                              With Cells(x, y)
                                   If .Comment Is Nothing Then
                                      .AddComment "Новый текст1"
                                   Else
                                      .Comment.Text .Comment.Text & vbCrLf & "Новый текст2"
                                   End If
                              End With


                            ExpandedWrap disabled
                              With Cells(x, y)
                                   If .Comment Is Nothing Then
                                      .AddComment "Новый текст2"
                                   Else
                                      .Comment.Text vbCrLf & "Новый текст4", Len(.Comment.Text) + 1
                                   End If
                              End With


                            И рекомендую присмотреться к методу NoteText , который не требует проверки существования примечания. Правда там, для создания текста примечания, содержащего более 255 символов, придётся использовать цикл.
                            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                            0 пользователей:


                            Рейтинг@Mail.ru
                            [ Script execution time: 0,0358 ]   [ 16 queries used ]   [ Generated: 28.03.24, 21:32 GMT ]