Удаление всех комментариев в Excel

#excel #vba

#excel #vba

Вопрос:

Привет, я работаю над собственным обучением, и курс Udemy, который я прохожу, помогает мне изучать VBA, чтобы я мог создавать некоторые макросы на своей работе, которые заставят меня выглядеть профессионально. Итак, первое упражнение просит меня записать макрос, который удаляет все комментарии из книги. Я думал, что смогу возглавить класс, используя несколько циклов, но я продолжаю получать ошибки, думая, что я умный. Я продолжаю получать в цикле cm, что объект не поддерживает это свойство или метод. Ошибка времени выполнения 438 Я не понимаю, почему это учитывается, когда я делаю cm. откроется выпадающий список.

 Sub delete_Comments()
' just trying to see if the cm loop works because it counted properly with the ws loop
Dim counter As Integer
' so i can use to run through the work sheets
Dim ws As Worksheet
'so I can run through the activesheet
Dim cm As Comment
counter = 0

'loop through the sheets in the workbook
 For Each ws In Worksheets
 'loop through the comments on active worksheet
  For Each cm In ActiveSheet
    cm.Delete

    counter = counter   1
  Next cm
    MsgBox counter
 Next ws

 End Sub
 

обновленный цикл спасибо @JohnColeman

 For Each ws In Worksheets
 'clear comments
     Selection.SpecialCells(xlCellTypeComments).Select
    Selection.ClearComments
    counter = counter   1
 Next ws
 

Комментарии:

1. @JohnColeman Теперь я вижу это в специальном выпуске goto, но меня смутили заметки, а не комментарии. Другая проблема, с которой я сталкиваюсь, — это проверка наличия комментариев во всем разделе, потому что между двумя строками есть пустые листы, поэтому, если я использую оператор if, это меня испортит

2. Рабочие листы не являются коллекциями комментариев, поэтому ваш цикл не имеет смысла. Но в рабочих листах есть коллекция комментариев

3. @JohnColeman Я не знаю, что случилось с вашим первым комментарием, но я понял, что вы говорили, поэтому обновил свой цикл, чтобы иметь больше смысла, большое вам спасибо, и это сработает, я опубликую его здесь

4. Я пытался понять, как получилось, что я заставляю его работать, затем я получаю сообщение об ошибке 1004, ячейки не выбраны, и я использовал следующее возобновление при ошибке. В принципе, если я просматриваю каждый рабочий лист, чтобы сделать это, он выдаст сообщение об ошибке, если ячейки не были найдены, и когда я использую on error no resume next, он не переходит к следующему рабочему листу?

5. For Each ws In Worksheets: ws.Cells.ClearComments: Next Ws

Ответ №1:

Вот один из способов удаления комментариев в старом стиле:

 Sub jkdfsh()
    Dim c As Comment, w As Worksheet

    For Each w In Sheets
        k = w.Comments.Count
        If k = 0 Then
            MsgBox "no comments n sheet " amp; w.Name
        Else
            For Each c In w.Comments
                c.Delete
            Next c
        End If
    Next w
End Sub