首页 > 解决方案 > 无法让 VBA 编辑现有超链接

问题描述

因此,我正在运行一个将会计日志存档到存档文件夹中的宏,在存档后,宏会清除多张纸上的一列以清除会计日志。出于某种原因,当我第一次运行此宏时,一切正常,但链接到服务器上文件夹的每个超链接都损坏了。最后两个文件夹是正确的,但是当我单击编辑超链接时,所有前面的文件夹都变成了“../../../../../”。所以它看起来像“../../../../../Clients/ClientA/”。存档文件具有相同的“../../”,但链接有效。

单击链接后,我收到以下错误提示:“无法打开指定的文件。” 但是当我编辑文件并放置文件夹名称而不是“../”时,它工作正常。我不确定为什么会发生这种情况。但不管每个超链接都在单元格 G1 的每张纸上。所以我写了一个宏来修复链接。

  Sub hyperUpdate()
  Dim wsHyper As Worksheet, addr As String, lastrow As Long, h As Hyperlink

  lastrow = Worksheets("Auto Archive").Range("A" & Worksheets("Auto 
  Archive").Rows.Count).End(xlUp).Row

  For i = 2 To lastrow

  Set wsHyper = Worksheets(Worksheets("Auto Archive").Cells(i, 1).Value)
  wsHyper.Activate
  addr = Worksheets("Auto Archive").Cells(i, 3).Value
  wsHyper.Cells(1, 7).Activate


  Application.ActiveCell.Hyperlinks(1).Address = addr
  MsgBox Application.ActiveCell.Hyperlinks(1).Address

  Next i

  End Sub

所以消息框每次都说正确的地址但是当我点击编辑超链接时我得到相同的“../../”并且链接仍然不起作用。有什么更好的方法来解决这个问题?谢谢

标签: excelvba

解决方案


为了避免超链接 - 将文件的路径存储在单元格中(而不是超链接)

然后在 sheet.selectionchange 过程中进行如下操作

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
   Dim MinValidRow as long, MaxValidRow as Long, LinkedCol as long

   MinValidRow = 5 ' You Set this to whatever you want
   MaxValidRow = 9 ' You Set this to whatever you want
   LinkedCol   = 2 ' You Set this to whatever you want

   If Sh.Name = "YourSheet" then
      If Target.Column = LinkedCol and Target.Row > MinValidRow and Target.Row<MaxValidrow then
         CreateObject("Shell.Application").Open(Target.Text)
      End If
   End If
End Sub

您还应该远离选定的单元格,以便可以通过单击它再次选择它,并且您可能希望通过按住向下箭头来防止有人触发大量文件


推荐阅读