我想要一些代码来搜索工作表中的注释,并返回包含特定注释的单元格的地址。
这是我到目前为止所拥有的:
Public Sub CommentLocator()
Dim Sht As Worksheet
Dim cmt As Comment
Dim StartCell As Variant
Set Sht = Sheet06
For Each cmt In Sht.Comments
If cmt.Text = "$StartCell" Then
Set StartCell = Range(cmt.Parent.Address)
Debug.Print cmt.Parent.Address
End If
Next cmt
End Sub
问题是,这会将我的变量StartCell
设置为单元格中包含的值。但是,我想要它返回单元格的地址。
我已尝试删除Range
,但这会导致“运行时错误13:类型不匹配”。
我尝试在.Address
或Range
之后添加Range(cmt.Parent.Address)
,但这会导致“编译错误:参数不是可选的”或者“编译错误:需要对象”。
我觉得我很亲密,但不能让我自己动手。
我真的很感激任何人都可以在这里给我的帮助。感谢。
答案 0 :(得分:1)
不要在那里使用Range():
设置StartCell = cmt.Parent
作为字符串:
Startcell = cmt.Parent.Address
答案 1 :(得分:1)
就个人而言,我倾向于存储范围对象本身而不是地址。但是如果你想要所描述的解决方案,这将有效:
Public Sub CommentLocator()
Dim Sht As Worksheet
Dim cmt As Comment
Dim StartCell As Variant
Set Sht = Worksheets("Sheet06")
For Each cmt In Sht.Comments
If cmt.Text = "$StartCell" Then
StartCell = CStr(cmt.Parent.Address) ' <-- cmt.Parent is already a range object, no need for anything else. You can't use the Set keyword, though.
Debug.Print StartCell
End If
Next cmt
End Sub
要存储范围对象,请更改为:
Public Sub CommentLocator()
Dim Sht As Worksheet
Dim cmt As Comment
Dim StartCell As Range
Set Sht = Worksheets("Sheet06")
For Each cmt In Sht.Comments
If cmt.Text = "$StartCell" Then
Set StartCell = cmt.Parent
Debug.Print StartCell.Address
End If
Next cmt
End Sub