2015-03-19 4 views
0

Я установил кнопку печати, чтобы проверить, имеет ли ячейка значение перед печатью, однако оба окна сообщений всплывают, но если я выберу отмену в окне сообщения, лист все еще печатает. Как я могу предотвратить его печать, если я нажму кнопку «Отменить».Печать только в том случае, если значение ячейки равно true

Private Sub CommandButtonPrint_Click() 
If Sheets("New").Range("email").Value <> "" 
Cancel = True 
MsgBox "Email Address Needs to be Completed", vbInformation 
If response = vbCancel Then Exit Sub 
Application.EnableEvents = True 
response = MsgBox("Do you really want to print?", vbOKCancel) 
If response = vbCanel Then Exit Sub 
Sheets("New").PrintOut copies:=1, Collate:=True 
End If 
End Sub 

Заранее спасибо за любую помощь Джон Дэвис

+0

Вы сделали опечатку в нижней части, '' vbCanel'instead из vbCancel' – CustomX

ответ

0

Там очень много происходит здесь не так, на мой взгляд, вот некоторые замечания и предложил усовершенствование:

Private Sub CommandButtonPrint_Click() 
If Sheets("New").Range("email").Value <> "" '// requires a "Then" keyword 
Cancel = True '// Cancel isn't declared as a variable, why is this here? 
MsgBox "Email Address Needs to be Completed", vbInformation 
If response = vbCancel Then Exit Sub '// response hasn't been assigned a value yet so will be empty 
Application.EnableEvents = True '// No events are fired at this point so not sure why this is here 
response = MsgBox("Do you really want to print?", vbOKCancel) 
If response = vbCanel Then Exit Sub '// typo - should be "vbCancel" 
Sheets("New").PrintOut copies:=1, Collate:=True 
End If '// End If without valid If block. 
End Sub 

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

Private Sub CommandButtonPrint_Click() 

    If Sheets("New").Range("email").Value = "" Then MsgBox "Email Address Needs to be Completed", vbInformation 

    If MsgBox("Do you really want to print?", vbOKCancel) = vbOK Then Sheets("New").PrintOut copies:=1, Collate:=True 

End Sub 
+0

Спасибо за это, но она по-прежнему вызывает проблемы. Если появится всплывающее сообщение с сообщением о том, что адрес электронной почты должен быть заполнен, я затем нажимаю, чтобы отменить печать, чтобы я мог заполнить адрес электронной почты. Однако, как только поле электронной почты будет завершено, и затем нажмите кнопку печати, ничего не произойдет. Любая помощь будет принята с благодарностью. –

+0

См. Отредактированный ответ выше, это должно работать. –

+0

Привет. Я боюсь, что измененный код на самом деле не работает. Если поле электронной почты пустое, всплывающее сообщение спрашивает, хочу ли я печатать. Однако, если в диапазоне «электронная почта» есть значение, всплывающее сообщение сообщает, что поле электронной почты нуждается в завершении (это похоже на то, что требуется), но оно также не дает возможность распечатывать и просто закрываться. –

1

Вы написали "vbCanel" вместо "vbCancel". Который, конечно, никогда не «True», и поэтому вы никогда не выходите из процедуры.

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