首先,我不擅长vba,我使用了很多东西,但这不是我想要的;)
我想要完成的任务: 选择电子表格中的超链接范围并设置超链接以调用另一个电子表格单元格(始终)从A2到AX(取决于我选择的行数)。 (抱歉没有正确的命名,上次我使用vba大约是10年前)
在运行脚本之前:所有超链接都设置为不同的电子表格以调用单元格A2,如下所示:CommLinkItem_57!A2
重要提示:它无法使用=HYPERLINK(cell;name)
功能,而另一个脚本正在使用此电子表格,而且无法使用此功能
运行脚本后:超链接不会从A2
增加到AX
,而是所有超链接(我未选择的那些超链接)正在调用最后一个迭代元素。 AX
Sub LoopSelection()
Dim cel As Range
Dim selectedRange As Range
Dim aa As String
Dim counter As Integer
counter = 2
Set selectedRange = Application.Selection
For Each cel In selectedRange.Cells
Debug.Print cel.Address & " " & cel.Hyperlinks.Count
If cel.Hyperlinks.Count > 0 Then
aa = cel.Hyperlinks.Item(1).SubAddress
If cel.Hyperlinks.Item(1).SubAddress Like "*!*" Then
cel.Hyperlinks.Item(1).SubAddress = Trim(Split(aa, "!")(0)) & "!A" & counter
End If
counter = counter + 1
Debug.Print cel.Hyperlinks.Item(1).SubAddress
End If
Next cel
End Sub
例如,我从I10
到I20
选择10个单元格然后运行脚本..
我在控制台中的输出是这样的:
$I$10 1
CommLinkItem_57!A2
$I$11 1
CommLinkItem_57!A3
$I$12 1
CommLinkItem_57!A4
$I$13 1
CommLinkItem_57!A5
$I$14 1
CommLinkItem_57!A6
$I$15 1
CommLinkItem_57!A7
$I$16 1
CommLinkItem_57!A8
$I$17 1
CommLinkItem_57!A9
$I$18 1
CommLinkItem_57!A10
$I$19 1
CommLinkItem_57!A11
$I$20 1
CommLinkItem_57!A12
(工作正常,找到正确的单元格(I10:I20),找到一个超链接,找到名为CommLinkItem_57
的电子表格并设置(在控制台输出中)从A2
到{{1}的正确增量单元格值}
因此,在excel单元格中A12
和I10
正在调用I20
。
这是一个问题......
你能指出我犯错的地方,以及如何解决这个问题
答案 0 :(得分:1)
您的代码没问题。问题是工作表维护了不同 URL的HyperLinks集合。我怀疑你的初始URL都是一样的,因此你总是更新相同的HyperLink并最终获得具有最高计数器值的URL。如果可能,请将您的初始网址设置为不同。
答案 1 :(得分:0)
从我看到的柜台应该是不合适的。像这样:
For Each cel In selectedRange.Cells
counter = counter + 1
Debug.Print cel.Address & " " & cel.Hyperlinks.Count
If cel.Hyperlinks.Count > 0 Then
aa = cel.Hyperlinks.Item(1).SubAddress
If cel.Hyperlinks.Item(1).SubAddress Like "*!*" Then
cel.Hyperlinks.Item(1).SubAddress = Trim(Split(aa, "!")(0)) & "!A" & counter
End If
Debug.Print cel.Hyperlinks.Item(1).SubAddress
End If
'or put the counter here, it depends on your code...
Next cel
答案 2 :(得分:0)
就像@Excelosaurus所说的那样,所有超链接都是引用的,当我改变一个时,所有的超链接都被改变了。所以我做了解决方法,并从基础知识创建超链接:
With Worksheets(Application.ActiveSheet.Index)
""
我认为休息在代码中是不言自明的:
Sub LoopSelection()
Dim selectedRange As Range
Dim counter As Integer
Dim tableName As String
counter = 2
Set selectedRange = Application.Selection
tableName = Cells(2, selectedRange.Column).Value
For Each cel In selectedRange.Cells
With Worksheets(Application.ActiveSheet.Index)
.Hyperlinks.Add Anchor:=.Range(cel.Address), _
Address:="", _
SubAddress:=tableName & "!A" & counter, _
TextToDisplay:=tableName
End With
counter = counter + 1
Next cel
End Sub