我编辑了这个问题,因为我犯了一个小错误,并决定不将我正在使用的单元格引用简化为简单的单元格引用。
我选择通过运行宏来更新特定单元格中的超链接。
Range("AB118").Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
Range("Z118") & Range("AD105")
所以基本上:
AB列包含最终的超链接Eg。主页!AB118
Z列包含表单Eg的名称。家!
单元格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行结束,所以我不确定是否需要告诉它从特定行开始并在特定行结束。
答案 0 :(得分:2)
您可以使用以下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的建议。选择,使用以下内容。
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”列中创建链接。
答案 1 :(得分:1)
如果单元格值中未解决超链接问题,则执行超链接的代码可能会出错。您需要确保参考设置像图纸范围参考一样。
SubAddress:= Range("Z118") & Range("AD105")
应该是
SubAddress:= "'" & Range("Z118") &"'!" & Range("AD105")
但是由于这是在您的单元格值中处理的,因此您在此处有几个选择。但这是您所要求的For循环(有关While循环,请参见TinMan464):
Sub foo()
Dim i as integer
For i = 118 to 200 ‘change the last number to what you need
Range("AB"&i).Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= "'" & Range("Z"&i) &"'!" & Range("AD105")
Next i
End sub
但是我会避免使用select
Sub foo()
Dim i as integer
For i = 1 to 3 ‘change the last number to what you need
ActiveSheet.Hyperlinks.Add Anchor:= Range("AB"&i), Address:="", SubAddress:= "'" & Range("Z"&i) &"'!" & Range("AD105")
Next i
End sub
答案 2 :(得分:1)
我们已经使用标准的Form
循环获得了可接受的答案,但这是使用For
,For Each
和With
的版本:
Offset