有没有办法在Excel中将变量设置为等于注释的单元格地址?

时间:2017-06-23 08:33:06

标签: excel vba excel-vba

我想要一些代码来搜索工作表中的注释,并返回包含特定注释的单元格的地址。

这是我到目前为止所拥有的:

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:类型不匹配”

我尝试在.AddressRange之后添加Range(cmt.Parent.Address),但这会导致“编译错误:参数不是可选的”或者“编译错误:需要对象”

我觉得我很亲密,但不能让我自己动手。

我真的很感激任何人都可以在这里给我的帮助。感谢。

2 个答案:

答案 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