Excel VBA Гиперссылки Макросы
У меня есть рабочая тетрадь, первый лист которой представляет собой "шаблонный" лист, который я делаю копию перед вводом всех данных. На этом первом шаблонном листе есть макрос с гиперссылкой, который отлично работает, если я ввожу дату в шаблонный лист, но когда я делаю копию и использую гиперссылку, он возвращается к шаблонному листу и запускается оттуда.
Вот код, который я использую, который написан в области Объекты Sheet1 (а не в модуле), где я могу ошибаться, но гиперссылка не работает, если написана в области Объекты ThisWorkbook.
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
If Target.Range.Address = "$U$5" Then
Dim MyDir
MyDir = Range("T5").Value
Select Case MyDir
Case "N":
Range("B3:E3,C10,C16:D16,H3:K3,I10,I16:J16,N3:Q3,O10,O16:P16").Select
Range("B3").Activate
Case "S":
Range("B4:E4,C11,C19:D19,H4:K4,I11,I19:J19,N4:Q4,O11,O19:P19").Select
Range("B4").Activate
Case "E":
Range("B5:E5,C12,C22:D22,H5:K5,I12,I22:J22,N5:Q5,O12,O22:P22").Select
Range("B5").Activate
Case "W":
Range("B6:E6,C13,C25:D25,H6:K6,I13,I25:J25,N6:Q6,O13,O25:P25").Select
Range("B6").Activate
Case Else
MsgBox "No Direction Entered"
End Select
End If
End Sub
Я не хочу использовать кнопки или кнопки Activex/Forms и хочу, чтобы это была гиперссылка (так как после ввода нужных мне данных этот скопированный лист затем сам копируется в другую книгу, которая будет копировать любые кнопки или элементы управления вместе с ней. и я не хочу помнить, чтобы удалять их каждый раз, когда я заканчиваю форму).
Есть ли способ, чтобы скопированный макрос с гиперссылкой работал на скопированном листе, не возвращаясь к исходному листу шаблона?
1 ответ
Не знаю, будет ли это работать для вашего варианта использования, но вы можете использовать гиперссылку для запуска обычной функции...
Например, в ячейке:
=HYPERLINK("#DoSomething()","Do Something")
В обычном модуле:
Public Function doSomething()
'you can use Application.Caller to get the triggering cell:
Debug.Print "doSomething", Application.Caller.Address, Application.Caller.Parent.name
Set doSomething = Selection.Offset(0, 1) 'or wherever you want to link to
End Function