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