Excel VBA读取单元格注释



我正在编写一段代码,检查Excel单元格是否包含特定的线程注释

我不明白为什么第一个代码会给我错误

"对象变量或未设置块变量">

Sub test()
Dim R As Range
Set R = Range("E10:E205")
For Each R In R.Cells
If R.CommentThreaded.Text = "3" Then
MsgBox (R.Address)
End If
Next R
End Sub

而这个代码运行良好:

Sub test()
Dim R As Range
Set R = Range("E10:E205")
For Each R In R.Cells
If Not R.CommentThreaded Is Nothing Then
If R.CommentThreaded.Text = "3" Then
MsgBox (R.Address)
End If
End If
Next R
End Sub

如果单元格R没有CommentThreaded对象。当然,不存在的R.CommentThreaded不能具有.Text属性。

这就是为什么您首先需要检查R.CommentThreaded是否包含任何注释对象

If Not R.CommentThreaded Is Nothing Then

然后才能使用其.Text属性。


非主题:

MsgBox (R.Address)中,您应该删除括号MsgBox R.Address,除非您真的想从将参数提交为ByRef切换为提交ByVal

Answer = MsgBox(R.Address)   'parentheses needed because = is used
Call MsgBox(R.Address)       'parentheses needed because 'Call' is used
MsgBox R.Address             'don't use perenthesis without =

但这里的括号做了一些完全不同的事情(注意额外的空格!(:

MsgBox (R.Address)            'parenthesis here force ByVal!
^
| Extra space!

最新更新