2015-10-21 3 views
1

Я хочу, чтобы лист Administrator действовал как кнопка, но я не хочу идти на фактический лист.Сделать лист действовать как кнопка

Он должен открыть UserForm и оставаться на активном листе, если нажать на Administrator.

enter image description here

+0

Хорошо. Вы что-то пробовали? Можете ли вы показать нам? – BruceWayne

ответ

2

Вы можете создать публичную переменную CurrentSheet, инициализировать его ActiveSheet в случае Workbook_Open, а затем в SheetActivate случае рабочей книги либо обновить значение CurrentSheet или вернуться к предыдущему текущему листу и показать пользователь форма. Нечто подобное (в Workbook кода листа):

Public CurrentSheet As Worksheet 

Private Sub Workbook_Open() 
    Set CurrentSheet = ActiveSheet 
End Sub 

Private Sub Workbook_SheetActivate(ByVal Sh As Object) 
    If Sh.Name = "Administrator" Then 
     CurrentSheet.Activate 
     UserForm1.Show 
    Else 
     Set CurrentSheet = Sh 
    End If 
End Sub 

На Edit: Для того, чтобы быть в безопасности вы можете также добавить следующий код. Это добавляет уровень защиты, если что-то заставляет проект сбрасываться после события Workbook_Open. В исходном коде я смог сгенерировать сбой, когда я намеренно перезагрузил проект, прежде чем активировать Администратор.

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object) 
    Set CurrentSheet = Sh 
End Sub 

Это может оказать код в Workbook_Open резервированной, но лично я хотел бы сохранить его в виду того что я не нравится идея иметь неинициализированные глобальные переменные, даже если они будут инициализироваться, прежде чем их использовать. Также - если рабочая книга открывает в Администратор (это может быть некоторое условие ошибки), это гарантирует, что значение CurrentSheet имеет значение.

Смежные вопросы