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

时间:2019-06-10 18:08:03

标签: excel vba

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

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

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

尝试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的结果:“锚点”突出显示为导致错误。错误消息为“编译错误:预期:语句结尾”

可以做我想做的事吗?

1 个答案:

答案 0 :(得分:2)

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

  1. FormulaR1C1似乎不合格,因此它是错字或空变体
  2. xElement = FormulaR1C1 = ...分配一个布尔值(第二个比较的结果:FormulaR1C1 = ...xElement
  3. 最后,要就地修改数组,您不能For Each,而必须使用索引分配,否则就可以更改xElement,而无需修改xArray! / li>

Dim a as Long
For a = LBound(xArray) to UBound(xArray)`
    xArray(a) = "something..."
Next

您的第二次尝试失败,因为Anchor参数不能为空字符串。按Dox,it must be a shape or a range object

  

可以做我想做的事吗?

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

因此解决方案是在数组迭代期间使用.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