2015-06-04 3 views
0

workbook_open В случае, если шаблон, у меня есть горячая клавиша ^m зарегистрированной для запуска UserForm DataValidation:Как убедиться, что горячая клавиша запускает UserForm для активной книги?

Private Sub workbook_open() 

Application.OnKey "^m", "launchDataValidation" 

End Sub 

Sub launchDataValidation() 

DataValidation.Show 

End Sub 

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

Я попытался переписывания launchDataValidation как:

Sub launchDataValidation() 

On Error GoTo errHandler 

ActiveWorkbook.DataValidation.Show 
Exit Sub 

errHandler: 

End Sub 

Цель состоит в том, что открывается DataValidation формы активной рабочей книги, и если активная книга не имеет DataValidation формы, ничего не происходит. Но вместо этого вызов ActiveWorkbook.DataValidation.Show переходит к обработчику ошибок, предполагая, что это не правильный способ открыть эту форму в активной книге.

Я также попытался:

Sub launchDataValidation() 

Dim bkName As String 
Dim runString As String 

bkName = ActiveWorkbook.Name 
runString = "'" & bkName & "'!DataValidation.Show" 

On Error GoTo errHandler 

Application.Run runString 

Exit Sub 

errHandler: 

End Sub 

Это также бросил ошибку.

ответ

0

Фигурные это:

Private Sub workbook_open() 

Application.OnKey "^m", "launchDataValidation_ActiveBook" 

End Sub 


Sub launchDataValidation() 

DataValidation.Show 

End Sub 


Sub launchDataValidation_ActiveBook() 

Dim bkName As String 
Dim runString As String 

bkName = ActiveWorkbook.Name 
runString = "'" & bkName & "'!launchDataValidation" 

On Error GoTo errHandler 

Application.Run runString 

Exit Sub 

errHandler: 

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