【发布时间】:2022-01-16 18:19:29
【问题描述】:
大家好,提前感谢您的帮助。
我对 VBA 有以下要求:
-
使用Col D中的地址(Web Link)在Col A中添加超链接,保留Col A显示文本和工具提示Col D文件路径地址。
-
使用 Col E、Col A 和 Col B 中的文件路径地址在 Col C 中添加超链接(用于本地网络位置)。保留 Col C 显示文本和 Tooltip Col E、Col A 和 Col B 文件路径地址。文件命名始终遵循“Data-002 Rev 00.pdf”这个顺序。
-
在 Col F "View File Local" 中添加超链接,在 Col C 中添加相同的工具提示。
-
如果 Col E 为空 Col C 不应在 Col C 中添加超链接,应保留 Col C 的字体样式并在 Col F 中添加文本“未找到文件”。
-
在刷新表格时保留所有超链接,并且只为没有超链接的单元格创建新的超链接。
由于我是从另一个表中提取数据,上面的文档顺序可能会改变,例如刷新数据时“Data-002”可能在第二行,因为刷新后会添加“Data-001” .
不知道刷新后VBA超链接是否会保留原来的链接地址,如果是,则不再需要第5项要求。
我的最终用户倾向于删除 Col F 中的硬编码超链接公式,我希望修复超链接,这样他们就不能错误地删除或修改,或者最坏的情况是删除或删除超链接。
目前,我确实有下面的代码,它实际上完成了大部分 Hyperlink.Add,但它一直在为工作簿中可用的整个行和工作表做,这使 Excel 文件冻结。
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rColA As Range
Dim rColName As String
Dim LastRow As Long
Dim rColC As Range
Dim rColName1 As String
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
Set rColA = Range("A1:A" & LastRow)
If Intersect(Range("A1:A" & LastRow), Target) Is Nothing Then Exit Sub
Application.EnableEvents = False
For Each rColA In rColA
If rColA.Column = 1 Then
rColName = rColA.Value2
rColA.Parent.Hyperlinks.Add _
Anchor:=Cells(rColA.Row, 1), _
Address:=Cells(rColA.Row, 4), _
TextToDisplay:=rColA
rColA.Font.Size = 10
rColA.Font.Underline = False
End If
Next rColA
Set rColC = Range("C1:C" & LastRow)
If Intersect(Range("C1:C" & LastRow), Target) Is Nothing Then Exit Sub
For Each rColC In rColC
If Cells(rColC.Row, 5) <> "" Then
If rColC.Column = 3 Then
rColName1 = rColC.Value2
rColC.Parent.Hyperlinks.Add _
Anchor:=Cells(rColC.Row, 3), _
Address:=Cells(rColC.Row, 5) & Cells(rColC.Row, 1) & " Rev " & Cells(rColC.Row, 2) & ".pdf", _
TextToDisplay:=rColName1
rColC.Font.Size = 10
rColC.Font.Underline = False
End If
End If
Next rColC
Application.EnableEvents = True
End Sub
非常感谢任何帮助。提前谢谢你。
谢谢, 米尔克
【问题讨论】: