excel - 无法让 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
所以消息框每次都说正确的地址但是当我点击编辑超链接时我得到相同的“../../”并且链接仍然不起作用。有什么更好的方法来解决这个问题?谢谢
解决方案
为了避免超链接 - 将文件的路径存储在单元格中(而不是超链接)
然后在 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
您还应该远离选定的单元格,以便可以通过单击它再次选择它,并且您可能希望通过按住向下箭头来防止有人触发大量文件
推荐阅读
- rest - Delphi Datasnap REST 读取请求头 TWebrequest
- java - redhat ubi-openjdk的包安装命令
- chart.js - Chart.js minBarLength 是否适用于堆叠条?
- r - 在代码繁重的统计书籍中加快 bookdown 构建的选项
- python - 在 Python Pandas 中,有没有办法在一行中多行相邻?保持秩序
- javascript - 增加基本类型(来自 JavaScript: The Good Parts)——为什么返回 'this' 的值?
- java - 编写递归方法来查找传入的数字的质因子
- macos - SwiftUI:在 macOS 上关闭打开的窗口会导致崩溃
- sas - 使用 PROC GLM 重复测量方差分析,并尝试使用估计语句比较不同时间的治疗组,但收到错误消息
- jquery - asp.net mvc,剃刀部分视图-布尔属性未显示