2015-11-20 5 views
0

Доброго утра,«FollowHyperlink» применяется ко всем листам

Я работаю на таблице, которая предназначена быть максимально автоматизирована, насколько это возможно для моих неопытных коллег.

Одна из особенностей, с которой у меня возникают трудности, заключается в использовании гиперссылок на «открыть» и «закрыть» скрытый рабочий лист. Идея состоит в том, что пользователю доступен только Sheet1, пока они не нажмут на «open» (ссылка в Sheet1), которая запускает мой макрос gotoHidden (работает отлично) и показывает скрытый лист, который назван в честь номера строки, где находится гиперссылка (звучит сложнее, чем есть, но эта часть работает)

Когда пользователь закончил просмотр или редактирование скрытого в данный момент скрытого листа, он должен нажать «закрыть» (ссылку на скрытом листе), которая должна запускать мой макрос closeHidden. Если я пройду через макрос closeHidden, используя F8, он будет работать так, как я ожидаю, но я не могу заставить его запускаться при нажатии ссылки.

Ниже приведен код, я работаю с:

Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) 
    If Target.Name = "Open" Then 
     gotoHidden 
     Else 
      If Target.Name = "Close" Then 
       closeHidden 
      End If 
     Exit Sub 
    End If 
End Sub 

Изначально я создал этот код, а также два моих макросов для gotoHidden и closeHidden, в редакторе VBA для Лист1, и «открытым» часть делает работа.

Я попытался переместить весь код в объект ThisWorkbook, думая, что это сделает его доступным со всех листов, но это, похоже, не работает.

я могу заставить его работать, если добавить следующий код для отдельного листа:

Public Sub closeHidden() 
    ActiveSheet.Visible = xlVeryHidden 
    Sheets(1).Activate 
End Sub 

Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) 
    If Target.Name = "Close" Then 
     closeHidden 
    End If 
    Exit Sub 
End Sub 

Однако отдельные листы генерируются различным макро (createNew), и я не знаю, есть ли способ автоматического добавления этого кода на каждый новый лист по мере его создания.

Я чувствую, что я очень близок к решению этого вопроса, но я посмотрел на столько разных постов и пробовал так много комбинаций, которые мне просто не кажутся самим собой.

Может ли кто-нибудь увидеть решение?

Надеюсь, это ясно, чего я пытаюсь достичь, но, если необходимо, попросите уточнить.

Большое спасибо заранее.

Обновление: Я просто попытался добавить код в модуль вместо объекта, который также не работал. Однако добавление двух моих макросов (gotoHidden и closeHidden) в модуль позволяет мне называть их из отдельных объектов, что делает вещи немного опрятными и может помочь мне привести мой код в будущем.

+0

Если я пытаюсь применить «Worksheet_FollowHyperlink» к неизвестному количеству рабочих листов, я бы, скорее всего, попробовал кодирование «Workbook_SheetFollowHyperlink», отбрасывая действия, когда «sh.name = Worksheets (« Мастер »). – Jeeped

ответ

0

Проблема, скорее всего, вызвана тем, что вы используете Activesheet в процедуре closeHidden, а активный лист - Sheet1, а не ваш целевой лист. Вы должны использовать Worksheets(sheetname).Visible = xlVeryHidden и иметь некоторый код для установки имени переменной в соответствии с строкой активной ячейки.

0

Я пытался обновить свое сообщение, чтобы сказать, что нашел решение, но, судя по всему, он не сохранил изменения.

Как и то, что прокомментировал Jeeped, я обнаружил разницу между Worksheet_FollowHyperlink и Workbook_SheetFollowHyperlink.

Я был тогда в состоянии использовать следующий код в ThisWorkbook:

Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink) 
Dim shName As String 
Dim sheet As Worksheet 
shName = ActiveCell.Row - 2 
    If Target.Name = "Open" Then 
     gotoHidden 
     Else 
      If Target.Name = "Close" Then 
       closeHidden 
      End If 
     Exit Sub 
    End If 
End Sub 

я должен был сделать несколько настроек в код, который я использовал для создания гиперссылок на скрытых листах, но это в настоящее время работает ,

Спасибо всем за ваши ответы.