【问题标题】:Create hyperlink using information from two columns使用来自两列的信息创建超链接
【发布时间】:2012-08-11 18:18:53
【问题描述】:

使用 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 不会有问题。

【问题讨论】:

  • 哦,好的,这么快就回答了!已经非常感谢你了,我马上试试。

标签: vba excel hyperlink excel-2010


【解决方案1】:

尝试使超链接的参数。添加使用变量。

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 范围。您可能还想制作这些 Offset(0,1),因为 Offset 是 Offset(row,column) 并且您似乎正在迭代水平范围。

【讨论】:

  • 嗨,我设置了以下范围: Set Branch_ID = Worksheets("Default").Range("M2") Set Name_ID = Worksheets("Default").Range("G2") 和使用 .Offset(1,0) 我想在每个循环中向下移动。当我设置 targetRng = range("A1") 时,它是否总是停留在这个位置,还是我也必须在那个位置上执行偏移?
  • 它将始终保持为“A1”,直到您将其设置为其他值。在上面的代码中,检查下一个单元格的序列 Set Branch_ID = Branch_ID.Offset(1, 0) Set Name_ID = Name_ID.Offset(1, 0)` - 您在不更新分支/名称 ID 的情况下进行迭代(因为“for每个单元格”循环在分支/名称永远重置之前结束)
  • 嗯,它现在以某种方式工作。我将 Offsets(1,0) (因为我认为它是 Offset(row,column))放入循环中。但现在它只遍历前 7 行。有什么想法吗?
  • 当将 Offset 更改为 Offset(0,1) 时,它只会在同一行中创建超链接。但奇怪的是,它还会在右侧创建 7 个超链接。我不知道为什么......
  • 查看您正在迭代的范围 (G2:M2)。此范围内只有 7 个单元格。
【解决方案2】:

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

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

【讨论】:

  • 这基本上是对的,但为什么不多走一步,给出填在&lt;&lt;...&gt;&gt;之间的代码呢?
  • 没错,因为这是我的问题之一。我是一个真正的 vba 初学者......所以我不知道什么是可能的,什么不是。好吧,基本上我知道什么是不可能的,因为 Excel 在每个角落都告诉我 :)
【解决方案3】:

有效!
感谢大家的帮助。
解决方案是不要放置 (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 构造方面。
但到目前为止,它有效。这并不意味着任何人都应该阻止他们的 cmets 改进这一点;)。这些基本上是我在 VBA 中的第一步! :)

【讨论】:

  • 您将需要一个转义条件,否则它将永远迭代,直到它到达工作簿的末尾。或者将您的范围更改为“G2:M999”或任何合适的范围。
猜你喜欢
  • 1970-01-01
  • 2017-05-07
  • 1970-01-01
  • 2012-12-01
  • 1970-01-01
  • 2017-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多