【发布时间】:2019-06-19 17:44:05
【问题描述】:
我有一个宏,它遍历工作簿中所有工作表上的所有超链接,如果超链接的范围等于先前指定的范围,则将超链接复制到新工作簿中目标工作表上的相同范围,然后然后移动到下一个工作表。这在大约 5 个工作表的过程中完美运行,然后突然抛出不匹配错误,整个过程失败。
在调试时,我已经确定每次在同一个工作表上的同一个超链接上,Worksheet.Hyperlink.Range(我的代码中的hyperlink.range)都会返回一系列范围,而不仅仅是一个(据我所知) ,并且由于循环将其与单个范围进行比较,因此这是发生不匹配的地方。问题是我无法确定为什么会这样。与其他会导致它表示为一系列范围的超链接相比,我找不到此超链接的属性有任何差异。
Public Sub CopyLink(fromRange As range, toRange As range)
Dim hyperlink As Hyperlink
Dim fromSheet As Worksheet
Set fromSheet = fromRange.Worksheet
For Each hyperlink In fromSheet.Hyperlinks
If hyperlink.range = fromRange Then 'mismatch happens here after several successful iterations
hyperlink.range.Copy
toRange.PasteSpecial
Exit For
End If
Next
End Sub
我想知道怎么做
A.以避免此问题的方式更改两个范围的比较
或
B.了解问题的原因,以便我有希望纠正它。
【问题讨论】:
-
能否比较 range.address 以避免错误?
-
这是个好主意。我现在会对此进行调查并报告。
-
更新:range.address 返回多个单元格,与返回多个范围的范围一致。如果不是这种情况,这绝对可行,我很欣赏这个想法。但是,我仍然不确定为什么这个特定的 hyperlink.range 会返回一系列单元格,而不仅仅是一个被迭代的单元格。
-
您能解释一下“如果超链接的范围等于先前指定的范围”是什么意思吗?您的意思是它们指的是相同的地址/位置吗?或者它们包含相同的潜在价值?
-
$D$D:$D$36不是有效地址?