VBA循环为列中的每个单元格更新超链接

时间:2019-03-19 19:25:34

标签: excel vba

我编辑了这个问题,因为我犯了一个小错误,并决定不将我正在使用的单元格引用简化为简单的单元格引用。

我选择通过运行宏来更新特定单元格中的超链接。

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行结束,所以我不确定是否需要告诉它从特定行开始并在特定行结束。

3 个答案:

答案 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循环获得了可接受的答案,但这是使用ForFor EachWith的版本:

Offset