1

我在代码中想要的是,当我在 sheet1 中单击此单元格 B3 时,它将引导我到 sheet2 中的 A5,反之亦然,当我在 sheet2 中单击 A5 时,它会将我带回到 sheet1 中的 B3 https://i.stack .imgur.com/qUngD.jpg

Sub Macro3()
'
' Macro3 Macro
'

'
    Range("B3").Select
    ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
    "Sheet2!A5", TextToDisplay:="gg"
    Sheets("Sheet2").Select
    ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
    "Sheet1!B3", TextToDisplay:="gg"
    Sheets("Sheet1").Select
End Sub

现在我的问题是如果工作表的名称是用户定义的怎么办?有一个消息框说您应该输入工作表的名称。所以子地址现在改变了,它不再只是“Sheet2”了。例如,您在 msgbox 中输入“123”,工作表的名称现在将变为“Sheet2 123”。

4

1 回答 1

1

您应该利用工作表集合的索引。

Sub IndexingSheets()
    Sheets(1).Range("B3").Formula = _
     "=HYPERLINK(""#" & ThisWorkbook.Sheets(2).Name & "!A5"", ""TextToDisplay"")"
    Sheets(2).Range("A5").Formula = _
     "=HYPERLINK(""#" & ThisWorkbook.Sheets(1).Name & "!B3"", ""TextToDisplay"")"
End Sub

此代码假定您的 sheet1 和 sheet2 始终是工作簿中的前两张表。


但是,如果您想询问名称,则可以改用它:
代码检查工作表是否已存在(因此您可以参考它)。如果是,则执行宏,如果不是,则递归调用该过程以请求另一个名称。

Dim sheetExist As Boolean

Sub PrefNamedSheets()

    Dim shName$, i&
    shName = InputBox("Whats the second sheet name?")
    For i = 1 To Worksheets.Count
        If StrComp(CStr(Sheets(i).Name), shName, vbTextCompare) = 0 Then
            sheetExist = True
        End If
    Next i
    If sheetExist Then
        ActiveSheet.Range("B3").Formula = _
         "=HYPERLINK(""#" & shName & "!A5"", ""TextToDisplay"")"
        Sheets(shName).Range("A5").Formula = _
         "=HYPERLINK(""#" & ThisWorkbook.Sheets(1).Name & "!B3"", ""TextToDisplay"")"
    Else
        Call PrefNamedSheets
    End If
End Sub

您可能还会发现此链接很有用!

于 2013-05-21T08:46:34.587 回答