Vba 消息框答案是否被忽略?
我有一个ActiveX命令框,用来打印报告。用户可以选择打印压缩版。如果是,代码应该隐藏一些行并将图纸设置为纵向。如果否,则使用图纸的默认值打印报告 到目前为止,无论单击什么,都将使用图纸的默认值而不是编码参数打印完整报告。我怎样才能解决这个问题Vba 消息框答案是否被忽略?,vba,excel,messagebox,Vba,Excel,Messagebox,我有一个ActiveX命令框,用来打印报告。用户可以选择打印压缩版。如果是,代码应该隐藏一些行并将图纸设置为纵向。如果否,则使用图纸的默认值打印报告 到目前为止,无论单击什么,都将使用图纸的默认值而不是编码参数打印完整报告。我怎样才能解决这个问题 Private Sub SummarizedReport_Click() Application.ScreenUpdating = False Dim Answer As Integer ActiveWorkbook.Unprotect Ms
Private Sub SummarizedReport_Click()
Application.ScreenUpdating = False
Dim Answer As Integer
ActiveWorkbook.Unprotect
MsgBox "Would you like to Print a Compact Version of this Estimate?", vbYesNo + vbQuestion, "Print Dialogue"
If Answer = vbYes Then
Worksheets("SUMMARY").Unprotect
Worksheets("SUMMARY").Rows("F:I").Hidden = True
Worksheets("SUMMARY").PageSetup.Orientation = xlPortrait
Worksheets("SUMMARY").PageSetup.PaperSize = xlPaperLetter
Sheets("Cover Page").Visible = -1
ActiveWorkbook.Sheets(Array("Cover Page", "SUMMARY")).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, IgnorePrintAreas:=False, OpenAfterPublish:=True
Sheets("Cover Page").Visible = 2
Sheets("SUMMARY").Rows("F:I").Hidden = False
Sheets("SUMMARY").Protect
Else
Sheets("Cover Page").Visible = -1
ActiveWorkbook.Sheets(Array("Cover Page", "SUMMARY")).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
Sheets("Cover Page").Visible = 2
End If
ActiveWorkbook.Protect
Worksheets("Control").Activate
Application.ScreenUpdating = True
End Sub
这是让你绊倒的两块。 在声明期间处于顶部
Dim answer As VbMsgBoxResult
当您向用户查询答案时:
answer = MsgBox ("Would you like to Print a Compact Version of this Estimate?", vbYesNo, "Print Dialogue")
然后根据
If answer = vbYes Then
'your code for yes
Else 'assumes it was no.
'your code for no
End if
您通过
Answer=MsgBox(…)
获得响应。我应该把它放在哪里?正确!这就是你在一个屏幕上看,在另一个屏幕上输入的结果。接受@YowE3K的建议。他比我强得多。我想我应该指出,Dim答案作为整数
(所有枚举值都小于7,因此它很乐意将MsgBox
结果转换为整数)没有什么特别的错误,但是使用正确的枚举类型可以让Intellisense更好地工作-例如,当您开始键入代码行如果回答=
,它将提示您选择所有有效值。@YowE3K只是为了确保我的选择正确;因为我将其用作整数,所以应该将其检查为vbYes(6)的数值,而不是简单的vbYes?@TomStone No,vbYes
是一个值为6的枚举值。因此,您可以非常愉快地比较枚举值和整数值,VBA将根据需要进行类型转换。因此Answer=6
将与Answer=vbYes
相同。只是,如果您将Answer
声明为VbMsgBoxResult
,则Intellisense会使您在键入代码时的工作更轻松-它将允许您从列表中选择vbYes
,而不必手动键入它(毫无疑问,当您将Answer
声明为Integer
时,您必须这样做)。使用正确的类型有助于防止其他编码错误。