我编辑了这个问题,因为我犯了一个小错误,并决定不将我正在使用的单元格引用简化为简单的引用。
我选择通过运行宏来更新特定单元格中的超链接。
Range("AB118").Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
Range("Z118") & Range("AD105")
所以基本上:
AB 列包含最终的超链接,例如。主页!AB118
Z 列包含工作表的名称,例如。家!
单元格 AD105 包含您将登陆的单元格,例如。 AB118
我已经编写了宏来一次更新一个单元格/行的超链接。
'Update "Sheet 1" Link
Range("AB118").Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
Range("Z118") & Range("AD105")
'Update "Sheet 2" Link
Range("AB119").Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
Range("Z119") & Range("AD105")
'Update "Sheet 3" Link
Range("AB120").Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
Range("Z120") & Range("AD105")
有没有办法使用“For Each”或类似的方法来缩短这个宏,它通过每一行将 Z 列和单元格 AD105 组合成一个出现在 AB 列中的超链接。
希望这是有道理的,我对 excel 和 VBA 非常有经验,但对论坛来说是新手。
此信息表从第 118 行开始,到第 171 行结束,所以我不确定是否需要告诉它从特定行开始并在特定行结束。
最佳答案
您可以使用以下 Sub 循环浏览列“B”和“C”,直到其中一个为空。这将使用“B”和“C”中的值填充“A”列,直到没有更多的连续值。
Private Sub NewLink()
Dim i As Integer
i = 1
Do Until IsEmpty(Range("B" & i).Value) Or IsEmpty(Range("C" & i).Value)
Range("A" & i).Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
Range("B" & i) & Range("C" & i)
i = i + 1
Loop
End Sub
只需使用以下命令在您需要/希望它运行的任何地方调用此函数。
Call NewLink
按照 Dude_Scott 对 .Select 的建议,使用以下内容。
Private Sub NewLink()
Dim i As Integer
i = 1
Do Until IsEmpty(Range("B" & i).Value) Or IsEmpty(Range("C" & i).Value)
ActiveSheet.Hyperlinks.Add Anchor:=Range("A" & i), Addreess:="", SubAddress:= _
Range("B" & i) & Range("C" & i)
i = i + 1
Loop
End Sub
编辑:帮助读者选择适合他们需求的解决方案。
“Do While”循环的优点是您可以添加额外的连续行,而无需更新您的宏/子。
缺点是“B”和“C”列本质上是为在“A”列中创建链接而保留的。
关于excel - VBA循环更新列中每个单元格的超链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55248635/