当您在文档中创建超链接时,您需要提供要链接到的单元格的“完整”地址(工作表名称和单元格地址),而不仅仅是 .Address(这是给定的工作表,但不包括工作表信息)。要获取单元格的完整地址(包括工作表),您需要在Address() 中添加一个附加参数:
.Address(External:=True)
这将为您提供完整的地址,包括工作簿和工作表名称。不幸的是,如果您创建此链接,然后更改工作簿的名称(可能是因为您尚未保存它),该链接将断开。
因此,创建一个不包含工作簿名称的链接(稍微)更可靠。以下例程为您执行此操作。请注意,将代码拆分成小的独立函数通常是一个好主意,这些函数可以很好地完成一件事 - 您可以更轻松地重用代码,并且主程序变得更易于阅读和维护。因此,我建议您创建以下函数:
Sub addLink(target As Range, location As Range, text As String)
' create a hyperlink with text "text"
' in the cell "location"
' pointing to the range "target"
Dim linkAddress As String
linkAddress = target.Address(external:=True) ' this is the "full" address
'remove everything between brackets - this is the workbook name:
bLeft = InStr(1, linkAddress, "[") ' location of left bracket
bRight = InStr(bLeft, linkAddress, "]") ' location of right bracket
linkAddress = Left(linkAddress, bLeft - 1) + Mid(linkAddress, bRight + 1)
' now create the link:
location.Parent.Hyperlinks.Add _
anchor:=location, _
Address:="", _
SubAddress:=linkAddress, _
TextToDisplay:=text
End Sub
您可以从上面的代码中调用它,如下所示:
Dim TXT As String, AKO As Range, LOC As Range ' define types when possible
TXT = Sheets("INDEX").Cells(2, 1).Value ' I called this text
Set AKO = Sheets("TOBESEEN").Cells(1, 1) ' I called this target (note - need Set)
Set LOC = Sheets("INDEX").Cells(1, 2) ' I called this location
addLink AKO, LOC, TXT
至于您问题的第二部分-“我看不到Cells() 的属性”。是的,这很烦人。碰巧Cells() 很像Range 对象;你可以在上面看到我能够做到Set AKO = Sheets("TOBESEEN").Cells(1,1) 这证明了这一点。您可以将变量声明为 Range 类型,然后工具提示将为您工作:
Dim r As Range
r.
当您输入r. 时,您将看到Range 的属性列表(这也是Cells 的属性):
令人讨厌的是Cells 不只是自己做这件事。 Address() 没有包含工作表名称而不是工作簿名称的选项,这很烦人。 Excel 充满了烦恼。事实上,甚至还有a book called "Excel Annoyances"。我敢肯定,还可以写更多……
至少通常有 VBA 技巧可以解决这些问题并完成工作。