请尝试下一个解决方案。它仅使用超链接来调用能够从超链接TextToDisplay 中提取工作表和范围的函数:
- 在标准模块中复制下一个
Sub(以创建超链接)。也可以手动创建超链接:
Sub testCreateHyperlink()
ActiveSheet.Hyperlinks.Add Anchor:=Range("a20"), Address:="", _
ScreenTip:="Select discontinue range in anohter sheet", _
TextToDisplay:="Documentation|A4,A7,A8,A15,B20"
End Sub
可以创建许多这样的超链接。实际规则为第 1 列中的超链接运行宏,但可以根据需要轻松调整代码。
- 在存在超链接的工作表模块中,复制下一个事件代码:
Option Explicit
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
If Target.Range.Column = 1 Then
Dim sh As Worksheet
Set sh = Worksheets(Split(Target.Range.Value, "|")(0)): sh.Activate
sh.Range(Split(Target.Range.Value, "|")(1)).Select
End If
End Sub
- 单击上面创建的超链接,将在单击的单元格
TextToDisplay 超链接保留的组合“工作表名称|范围”中进行选择。
这样,保存范围地址的字符串可以更长(不需要每个连续范围的工作表名称,加上连接字符)。如果达到了 256 个字符的限制,我也在想办法解决这个问题……
- 为了在创建超链接时快速/轻松地填充
TextToDisplay,可以想象一些功能。下一个从选定的单元格创建必要的字符串:
Private Function strSelTextToD() As String
Dim sh As Worksheet: Set sh = ActiveSheet
strSelTextToD = sh.Name & "|" & Selection.Address(0, 0)
End Function
然后,从具有内部绿色 (65280) 的单元格创建它:
Private Function strTextToD() As String
Dim sh As Worksheet, Cel As Range, rng As Range
Set sh = ActiveSheet
For Each Cel In sh.UsedRange.cells
If Cel.Interior.Color = vbGreen Then
If rng Is Nothing Then
Set rng = Cel
Else
Set rng = Union(rng, Cel)
End If
End If
Next
If Not rng Is Nothing Then strTextToD = sh.Name & "|" & rng.Address(0, 0)
End Function
上面两个函数可以用下一种方式调用:
Sub testStrHypTTD()
Dim strToDisp As String
strToDisp = strSelTextToD: Debug.Print strToDisp
strToDisp = strTextToD: Debug.Print strToDisp
End Sub
而且返回的字符串可以简单的使用,在Sub创建超链接,像这样:
'...
TextToDisplay:=strSelTextToD