【问题标题】:VBA - Excel create a hyperlink using the sheets command and cells methodVBA - Excel 使用表格命令和单元格方法创建超链接
【发布时间】:2014-01-18 18:42:38
【问题描述】:

Q1:下面的例程不起作用。

Sub test()
TXT = Sheets("INDEX").Cells(2, 1).Value
AKO = Sheets("TOBESEEN").Cells(1, 1).Address
Sheets("INDEX").Hyperlinks.Add Anchor:=Sheets("INDEX").Cells(1, 2), Address:="",
SubAddress:=AKO, TextToDisplay:=TXT
End Sub

第二季度。有没有可以看到细胞所有属性的地方?当我在单元格后键入“点”时,VBA 不提供任何选项。

喜欢

sheet1.cell(1,2).VALUE
sheet1.cell(1,2).ADDRESS
sheet1.cell(1,2).?

我怀疑我的问题与 AKO 的定义有关,但我不确定正确的属性是什么(如果不是 ADDRESS)

谢谢

【问题讨论】:

  • 第二季度,Language Reference
  • 请编辑您的问题以提供有关例程如何不起作用的更多详细信息。此外,问题也完全不同,因此最好分成两个单独的问题。

标签: vba properties hyperlink range cell


【解决方案1】:

Q1:尝试使用此代码:

Sub test()
    TXT = CStr(Sheets("INDEX").Cells(2, 1).Value)
    AKO = Sheets("TOBESEEN").Cells(1, 1).Address
    Sheets("INDEX").Hyperlinks.Add _
       Anchor:=Sheets("INDEX").Cells(1, 2), _
       Address:="", _
       SubAddress:=Sheets("TOBESEEN").Name & "!" & AKO, _
       TextToDisplay:=TXT
End Sub

Q2:您可以使用 F2 帮助。在那里你可以看到任何对象的属性和方法列表。

【讨论】:

    【解决方案2】:

    当您在文档中创建超链接时,您需要提供要链接到的单元格的“完整”地址(工作表名称和单元格地址),而不仅仅是 .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 技巧可以解决这些问题并完成工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多