使用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
不会有问题。
答案 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的第一步! :)