如何创建超链接数组(Excel VBA)?

如何创建超链接数组(Excel VBA)?,excel,vba,Excel,Vba,是否可以在数组中创建超链接列表,以便数组元素都是超链接 我正在研究一种更有效的宏来创建超链接索引。我有一个数组中的所有工作表名称,但在将其打印到“索引”选项卡上之前,希望将数组元素转换为超链接 到目前为止,我已经尝试了以下内容(这只是我尝试将数组元素转换为超链接的代码部分) 尝试1: For Each xElement In xArr xElement = FormulaR1C1 = "=Hyperlink(""xWB.Sheets(xElement)!A1"", xWB.Sheets(

是否可以在数组中创建超链接列表,以便数组元素都是超链接

我正在研究一种更有效的宏来创建超链接索引。我有一个数组中的所有工作表名称,但在将其打印到“索引”选项卡上之前,希望将数组元素转换为超链接

到目前为止,我已经尝试了以下内容(这只是我尝试将数组元素转换为超链接的代码部分)

尝试1:

For Each xElement In xArr
    xElement = FormulaR1C1 = "=Hyperlink(""xWB.Sheets(xElement)!A1"", xWB.Sheets(xElement).Name)"
Next xElement
尝试1的结果:宏运行时没有错误,但结果列表没有超链接。我的索引就好像我把这段代码都漏掉了一样

尝试2:

For Each xElement In xArr
    xElement = .Hyperlinks.Add _
        anchor:="", _     'Compile error: Expected: end of statement
        Address:="", _
        SubAddress:="'" & xWB.Sheets(xelement).Name & "'!A1", _
        TextToDisplay:=xWB.Sheets(xelement).Name
Next xElement
尝试2的结果:“锚定”突出显示为导致错误。错误消息为“编译错误:应为:语句结束”


有可能做到我正在尝试的吗?

您的第一次尝试有一些问题

  • formula1c1
    似乎没有限定符,因此它要么是一个输入错误,要么是一个空变体
  • xElement=FormulaR1C1=…
    将布尔值(第二次比较的结果:
    FormulaR1C1=…
    指定给
    xElement
  • 最后,要在适当的位置修改数组,不能对每个使用
    ,必须使用索引赋值,否则在不修改
    xArray的情况下更改
    xElement
  • 您的第二次尝试失败,因为
    Anchor
    参数不能是空字符串。根据dox

    有可能做我正在尝试的事情吗

    严格地说,不可以。您不能“在将数组元素打印到我的索引选项卡上之前将其转换为超链接”,因为对您公开的单个
    Hyperlink
    没有构造函数(即,您不能单独创建或实例化
    超链接
    ,只能通过
    超链接.Add
    方法创建,该方法需要
    锚定
    参数)

    因此,解决方案是使用
    .Hyperlinks.Add
    方法在数组迭代期间创建它们,例如:

    Dim wsIndex as Worksheet
    Set wsIndex = Worksheets("Index")
    Dim x as Long
    With wsIndex
        For x = LBound(xArr) To UBound(xArr)
            .Hyperlinks.Add _
                wsIndex.Cells(x + 1, 1), _
                xArr(x).Name & "!A1", _
                TextToDisplay:=xArr(x).Name
        Next
    End With
    
    更新

    您可以在数组或集合中存储超链接,但必须先创建超链接。您可以执行以下操作:

    ReDim links(LBound(xArr) to UBound(xArr))
    Dim h as Hyperlink
    Dim wsIndex as Worksheet
    Set wsIndex = Worksheets("Index")
    Dim x as Long
    With wsIndex
        For x = LBound(xArr) To UBound(xArr)
            Set h = .Hyperlinks.Add _
                wsIndex.Cells(x + 1, 1), _
                xArr(x).Name & "!A1", _
                TextToDisplay:=xArr(x).Name
            ' Store the link in an array for later use, if needed
            Set links(x) = h
        Next
    End With
    

    FWIW,绝对没有必要“建立超链接”在将它们放在工作表上之前。您可以在构建目录时简单地迭代
    xArr
    。谢谢您,David。这听起来像是我真正想做的事情—将超链接存储在数组中—无法完成,但您提出的解决方案确实可以写出超链接结果。我很感激。@qqqq您可以停止请在数组中重新设置它们,但在创建它们之前不能存储它们。我将更新我的答案,使其生效:)
    ReDim links(LBound(xArr) to UBound(xArr))
    Dim h as Hyperlink
    Dim wsIndex as Worksheet
    Set wsIndex = Worksheets("Index")
    Dim x as Long
    With wsIndex
        For x = LBound(xArr) To UBound(xArr)
            Set h = .Hyperlinks.Add _
                wsIndex.Cells(x + 1, 1), _
                xArr(x).Name & "!A1", _
                TextToDisplay:=xArr(x).Name
            ' Store the link in an array for later use, if needed
            Set links(x) = h
        Next
    End With