#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