Vba 消息框答案是否被忽略?

Vba 消息框答案是否被忽略?,vba,excel,messagebox,Vba,Excel,Messagebox,我有一个ActiveX命令框,用来打印报告。用户可以选择打印压缩版。如果是,代码应该隐藏一些行并将图纸设置为纵向。如果否,则使用图纸的默认值打印报告 到目前为止,无论单击什么,都将使用图纸的默认值而不是编码参数打印完整报告。我怎样才能解决这个问题 Private Sub SummarizedReport_Click() Application.ScreenUpdating = False Dim Answer As Integer ActiveWorkbook.Unprotect Ms

我有一个ActiveX命令框,用来打印报告。用户可以选择打印压缩版。如果是,代码应该隐藏一些行并将图纸设置为纵向。如果否,则使用图纸的默认值打印报告

到目前为止,无论单击什么,都将使用图纸的默认值而不是编码参数打印完整报告。我怎样才能解决这个问题

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
时,您必须这样做)。使用正确的类型有助于防止其他编码错误。