Подзаголовок GoFC () в модуле, ссылающийся на более чем одно shtName-гиперссылки фигур на скрытые листы

#excel #vba

#excel #vba

Вопрос:

полностью новичок в VBA, был бы признателен за помощь в решении следующей проблемы:

В настоящее время используется Sub GoFC() в модуле для гиперссылки фигур на листе («Меню») на другие скрытые листы (фигуры и текст на листе совпадают)

Я хотел бы использовать Sub GoFC() для фигур на более чем одном листе, но код ссылается только на один лист по имени. Другими словами, я хочу, чтобы на рабочем листе «Меню» и на рабочем листе «Menu2» разрешалось запускать один и тот же макрос для всех фигур в них.

Я искренне надеюсь, что это имеет смысл.

Это код в модуле:

 Sub GoFC()
    shtName=Sheets("Menu").Shapes(Application.Caller).TextFrame2.TextRange.Text
    Sheets(shtName).Visible = True
    Application.Goto Sheets(shtName).Range("A1")
End Sub
  

Это код в «Меню» рабочего листа:

 Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
    Dim shtName As String
    'shtName = Target.Name
    If InStr(1, Target.SubAddress, "'") = 1 Then
        Sh = Mid(Target.SubAddress, 2, Len(Target.SubAddress) - 5)
    Else
        Sh = Left(Target.SubAddress, InStr(1, Target.SubAddress, "!") - 1)
    End If

    Sheets(Sh).Visible = True
    Sheets(Sh).Select
End Sub
  

Ответ №1:

Может быть, вот так

 Sub GoFC()
Dim sht As Worksheet
Dim wb As Workbook
Dim shtName As String
Set wb = ActiveWorkbook
Set sht = wb.ActiveSheet

    shtName = sht.Shapes(Application.Caller).TextFrame2.TextRange.Text
    If Not wsExists(shtName, wb) Then wb.Sheets.Add.Name = shtName
    wb.Sheets(shtName).Visible = True
    wb.Sheets(shtName).Activate
    wb.Sheets(shtName).Range("A1").Select
 End Sub

Function wsExists(wsName As String, wb As Workbook) As Boolean
Dim ws
    For Each ws In wb.Sheets
        wsExists = (wsName = ws.Name): If wsExists Then Exit Function
    Next ws
End Function
  

Комментарии:

1. Привет, спасибо за быстрый ответ. Я пробовал это, но это останавливается на shtName = sht . Фигуры (Приложение. Вызывающий объект).TextFrame2.TextRange. Текст, содержащий информацию, элемент не найден. Есть идеи?

2. .TextFrame2.TextRange.Text, возможно, такого атрибута нет. показать файл

3. Эй, эта часть кода также присутствовала в исходном коде и работала отлично

4. Как вы используете GoFC ()? с какой страницы?