使用两列中的信息创建超链接

时间:2012-08-15 12:49:30

标签: excel vba excel-vba hyperlink excel-2010

使用Excel 2010,在每行中我想在G列中创建一个超链接。

此列已包含将用作超链接的显示文本(或友好名称)的信息。

要使超链接指向正确的位置,需要列M保存的数字。匹配信息始终位于同一行。

基本上,这可能只是特定行的两个单元格中两位信息的合并。

这就是我的开始:

    Sub Macro2()
'
' Macro2 Macro
'
Dim Name As String
Dim Branch As String

' Combination of two rows
Dim CombineRow As Range

Dim cell As Range
Dim row As Range
Dim Branch_ID As Range

Set Branch_ID = Worksheets("Default").Range("M2")

Set CombineRow = Range("G2:M2")

For Each row In CombineRow.Rows
     For Each cell In row.Cells
        Branch = Branch_ID.Cells.Value
        Name = Name_ID.Cells.Value
        ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:= _
            "https://www.example.com/", SubAddress:= _
            "something:", _
            TextToDisplay:=Name
        Next cell
        ' relative one row down
        Set Branch_ID = Branch_ID.Offset(1, 0)
        Set Name_ID = Branch_ID.Offset(1, 0)
    Next row
End Sub

我不知道如何将M列的值(例如600021610)附加到超链接的末尾?

我是否在正确的道路上?

编辑:

我现在拥有的是:

Sub Macro2()
'
' Macro2 Macro
'
Dim Branch As String
Dim Name As String

' combine two rows
Dim CombineRow As Range

Dim cell As Range
Dim row As Range
Dim Branch_ID As Range
Dim Name_ID As Range

Set Branch_ID = Worksheets("Default").Range("M2")
Set Name_ID = Worksheets("Default").Range("G2")

Set CombineRow = Range("G2:M2")

For Each row In CombineRow.Rows
    For Each cell In row.Cells
        Branch = Branch_ID.Cells.Value
        Name = Name_ID.Cells.Value
        ActiveSheet.Hyperlinks.Add Anchor:=Name_ID, Address:= _
            "https://www.example.com/", SubAddress:= _
            "something" & Branch, _
            TextToDisplay:=Name
        Next cell
        Set Branch_ID = Branch_ID.Offset(1, 0)
        Set Name_ID = Name_ID.Offset(1, 0)
    Next row
End Sub

这样可行,但仅适用于第一行。为什么不循环呢? CombineRow是否真的像这样,或者必须是这样的:G:G;M:M或类似的东西?

我还可以设想使用Do ... While循环,因为输入end_tag不会有问题。

3 个答案:

答案 0 :(得分:2)

尝试为超链接创建参数.add使用变量。

dim addressStr as string
dim targetRng as Range

For Each row In CombineRow.Rows
     For Each cell In row.Cells
        Branch = Branch_ID.Cells.Value
        Name = Name_ID.Cells.Value

        set targetRng = range("A1")   'change this to whatever you want it to be each loop
        addressStr = "https://www.example.com/" & cells(cell.row,15).value

        ActiveSheet.Hyperlinks.Add Anchor:=targetRng , Address:= _
            addressStr, SubAddress:= _
            "something:", _
            TextToDisplay:=Name
        Next cell
        ' relative one row down
        Set Branch_ID = Branch_ID.Offset(1, 0)
        Set Name_ID = Branch_ID.Offset(1, 0)
    Next row<BR>
End Sub<BR>

此外,您将Name_ID和Branch_ID设置为偏移中的相同值。


在你的循环中,你只会遍历1行(因为你的范围都在第2行)。所以你唯一的循环是单元格 - 你不会设置不同的分支/名称ID,因为它们发生在循环之后:

For Each cell In row.Cells
    'stuff
Next cell

Set Branch_ID = Branch_ID.Offset(1, 0)
Set Name_ID = Name_ID.Offset(1, 0)

因此,每次调用超链接函数时,您使用的是相同的Name_ID范围。你可能还想制作那些偏移量(0,1),因为偏移量是偏移量(行,列),看起来你正在迭代一个水平范围。

答案 1 :(得分:1)

您可以简单地使用&运算符来连接字符串并创建URL。

addressStr = "https://www.example.com/" & <<Specify Cell for M Column and Row>>

答案 2 :(得分:0)

它有效!
感谢大家的帮助。
解决方案不是放(G2:M2)因为这导致只创建七个超链接 相反,只需将(G:M)和IF放在它周围,以防止它在单元格为空时创建无意义的超链接。

    Sub Macro2()
'
' Macro2 Macro
'
Dim Branch As String
Dim Name As String

' combine two rows
Dim CombineRow As Range

Dim cell As Range
Dim row As Range
Dim Branch_ID As Range
Dim Name_ID As Range

Set Branch_ID = Worksheets("Default").Range("M2")
Set Name_ID = Worksheets("Default").Range("G2")

Set CombineRow = Range("G:M")

For Each row In CombineRow.Rows
For Each cell In row.Cells

    Branch = Branch_ID.Cells.Value
    Name = Name_ID.Cells.Value

    If Name <> "" Then

        ActiveSheet.Hyperlinks.Add Anchor:=Name_ID, Address:= _
            "https://www.example.com", SubAddress:= _
            "something" & Branch, _
            TextToDisplay:=Name

    Set Branch_ID = Branch_ID.Offset(1, 0)
    Set Name_ID = Name_ID.Offset(1, 0)

    End If

    Next cell

    Next row

End Sub

我确信有很大的改进空间,特别是在IF建设中 但到目前为止,它的确有效。这并不意味着任何人都应该拒绝改进这一点;)。这些基本上是我在VBA的第一步! :)