我正在编写一段代码,检查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!