为什么我的vba脚本会单独更改所有超链接

时间:2017-10-23 20:27:26

标签: vba excel-vba excel

首先,我不擅长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

例如,我从I10I20选择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单元格中A12I10正在调用I20。 这是一个问题...... 你能指出我犯错的地方,以及如何解决这个问题

3 个答案:

答案 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所说的那样,所有超链接都是引用的,当我改变一个时,所有的超链接都被改变了。所以我做了解决方法,并从基础知识创建超链接:

  1. 我从A2到AX计数,因此计数器设置为2
  2. 嵌套单元格始终位于索引2的同一列中的表的名称,因此表名称设置第2行和所选范围的列,并获取单元格的值,即tableName
  3. 仅在活动工作表中创建超链接,行:With Worksheets(Application.ActiveSheet.Index)
  4. 如果我们不想要地址到网址或文件,请设置地址属性,即空引用""
  5. 我认为休息在代码中是不言自明的:

    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