2015-08-20 1 views
2

У меня есть макрос, назначенный на фигуру, и вы хотите, чтобы пароль защищал этот макрос, чтобы при нажатии на фигуру появилось всплывающее окно с просьбой о прохождении, и в идеале я хочу сделать это через Пользовательская форма.Ошибка компиляции: Ожидаемый конец Sub

Я посмотрел на этот вопрос: How do you password protect excel VBA macro from running и сделали то, что я считаю, что Отвечающий говорит, так что мой код выглядит следующим образом:

Sub EmailExtract() 

UserForm1.Show 

***Code for the macro then follows*** 

End Sub 

И тогда форма пользователя для нажатия кнопки:

Private Sub CommandButton1_Click() 
If TextBox1.Value = "Password" Then 'Replace Password by your custom password 
    Sub EmailExtract() 'This is the sub that was being called by your button. 
Else 
    MsgBox "You are not allowed to launch the macro" 
End If 
Exit Sub 
End Sub 

Но когда я пытаюсь запустить это я получаю ошибку Compile error: Expected End Sub на линии: If TextBox1.Value = "Password" Then

Может кто-то пожалуйста, скажите мне что я делаю неправильно?

+0

вы должны закрыть 'If statement' с' End If' After 'Exit Sub' – DragonSamu

+0

Спасибо за ваше предложение, я только что попробовал это, и я все еще получаю ошибку –

+0

разве у вас нет бесконечного цикл?вы нажимаете кнопку в пользовательской форме -> start sub 'emailextract' -> откройте пользовательскую форму, у нас было два шага до – psychicebola

ответ

3
  • вы должны закрыть If statement с End If После Exit Sub
  • И вы вызываете Sub внутри Sub, который бросает End Sub error вам нужно только положить в EmailExtract

См код ниже:

Private Sub CommandButton1_Click() 
If TextBox1.Value = "Password" Then 'Replace Password by your custom password 
    EmailExtract 'This is the sub that was being called by your button. 
Else 
    MsgBox "You are not allowed to launch the macro" 
Exit Sub 
End If 
End Sub 

Обновление:

Это другой подход к защите паролем и просто использует InputBox вместо UserForm для сбора и проверки значения пароля.

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

Sub EmailExtract() 
Dim Message As String, Title As String, Password As String 
Message = "Enter the macro password" ' Set prompt. 
Title = "Macro Password" ' Set title. 
Password = InputBox(Message, Title) 
If Password = "Password Here" Then 

    ''***Code for the macro then follows*** 

Else 
    MsgBox "You are not allowed to launch the macro" 
    Exit Sub 
End If 
End Sub 

второе обновление:

Таким образом, вы создаете Sub для вызова UserForm затем подтвердите ввод пароля, после того, что вы называете sub EmailExtract() и запустить нужный код.

Путь для использования защиты паролем с UserForm нижеследовал:

Показать UserForm (вызывается по вашей форме):

Sub UserFormShow() 

UserForm1.Show 

End Sub 

ли проверка пароля:

Private Sub CommandButton1_Click() 
If TextBox1.Value = "Password" Then 'Replace Password by your custom password 
    EmailExtract 'The new sub your going to call 
Else 
    MsgBox "You are not allowed to launch the macro" 
Exit Sub 
End If 

End Sub 

Запустите код (новый):

Sub EmailExtract() 

***Code for the macro then follows*** 

end sub 
+0

Спасибо! Это сработало блестяще! Единственная ошибка, которую я получаю сейчас, которая, по моему мнению, связана с тем, что @psychicebola указала в комментарии, - это когда пароль вводится с ошибкой: «Ошибка времени выполнения 400: форма уже отображается; не может показать модально', есть ли способ, которым я могу использовать пользовательскую форму и вызывать ее внутри макроса, не имея цикла? –

+0

поэтому, когда нажата форма, выполняется макрос, который вызывает форму пользователя, где вам нужно ввести пароль правильно? – DragonSamu

+0

Да, это правильно, поэтому кнопка click button> начинает макрос> открывает форму пользователя>, если пароль верный, вернитесь к макросу –