#excel #vba
Вопрос:
Sub CommentToCell()
Dim Rng As Range
Dim WorkRng As Range
On Error Resume Next
xTitleId = "KutoolsforExcel"
Set WorkRng = Application.Selection
Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8)
For Each Rng In WorkRng
Rng.Value = Rng.NoteText
Next
End Sub
Это мой код VBA. но это делает пустым, если ячейка не получает подтверждения.
Например, я использую эту функцию для в приведенной ниже ячейке.
1 1 1 0(comments) 1
Это становится
blank blank blank comments blank
Я хочу получить
1 1 1 comments 1
Комментарии:
1. Может быть, я бы проверил
len(Rng.NoteText)
?2. @Nathan_Sav Нет.. Я не хочу получать длину. Я хочу, чтобы ячейки без комментариев сохраняли свои исходные значения.
3. Да, так что, как я уже сказал, я бы проверил, тогда длина >0
Ответ №1:
Sub CommentToCell()
Dim Rng As Range
Dim WorkRng As Range
On Error Resume Next
xTitleId = "KutoolsforExcel"
Set WorkRng = Application.Selection
Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8)
For Each Rng In WorkRng
If Rng.Comment Is Nothing Then
Rng.Value = Rng.Value
Else
Rng.Value = Rng.NoteText
End If
Next
End Sub
Ответ оказался проще, чем я думал, и мне просто нужно было проверить заявление IF, чтобы узнать, есть ли памятка. Это хорошо работает.
Комментарии:
1. Я бы сократил «Если» до
If Not Rng.Comment Is Nothing Then Rng.Value = Rng.NoteText
2. @FunThomas Хорошая работа
3. Или, возможно, использовать
Rng.CommentThreaded is nothing
в зависимости от типа используемого комментария (использоватьComment
для заметок иCommentThreaded
комментариев).4. Молодец, Юн!!!