VBA代码求助:匹配“92/65/EEC”添加跨表超链接失败排查
修复你的VBA超链接添加代码
我帮你排查了代码里的问题,主要有几个关键错误导致运行异常,下面一步步说明并给出修正后的版本:
问题分析
- 错误嵌套
With cell.Validation:添加超链接和数据验证(Validation)完全无关,这个With块不仅多余,还会因为单元格没有预设验证规则而触发运行错误。 - Anchor参数指向错误:你用了
Anchor:=Selection,但循环逻辑里应该针对当前遍历的cell对象,而不是代码运行时选中的单元格——毕竟选中的单元格大概率不是当前循环到的J列目标单元格。 - 工作表名称的空格问题:原代码里的SubAddress写的是
'List of EU legislation '!A8,末尾多了一个空格,如果你的Sheet2实际名称是List of EU legislation(无末尾空格),这个超链接会找不到目标位置。
修正后的代码
Sub Legislation() ' Define variables Dim lrow As Long, rng As Range, cell As Range ' Get the last used row in column J lrow = Cells(Cells.Rows.Count, "J").End(xlUp).Row ' Set the target range (J5 to last row) Set rng = Range("J5:J" & lrow) ' Loop through each cell in the range For Each cell In rng ' Check if cell contains "92/65/EEC" (case-insensitive) If InStr(1, cell.Value, "92/65/EEC", vbTextCompare) > 0 Then ' Add hyperlink directly to the cell ActiveSheet.Hyperlinks.Add _ Anchor:=cell, _ Address:="", _ SubAddress:="'List of EU legislation'!A8", _ TextToDisplay:="92/65/EEC" End If Next cell End Sub
关键修改点说明
- 移除了多余的
With cell.Validation块,直接调用Hyperlinks.Add方法完成超链接添加。 - 将
Anchor:=Selection改为Anchor:=cell,确保超链接精准添加到当前循环的目标单元格。 - 修正了SubAddress里工作表名称的末尾空格(如果你的Sheet2名称确实包含末尾空格,可重新加回去)。
- 补充了注释,让代码逻辑更清晰。
另外,如果你希望只在单元格完全匹配“92/65/EEC”时才添加超链接,而不是包含该文本,可以把判断条件改成:
If UCase(cell.Value) = UCase("92/65/EEC") Then
内容的提问来源于stack exchange,提问作者Cathy
相关产品推荐
相关产品推荐

