Excel宏是否消息框,是和否的不同方向

时间:2016-06-14 18:26:23

标签: excel vba excel-vba

用户在YesNo消息框中有两个选项。如果否,它执行一定数量的过滤器,但如果用户对消息框问题回答“是”,我想过滤另一列。目前,在" Else",我得到的错误是"编译错误:赋值左侧的函数调用必须返回Variant或Object"如果我取出" Else"及其后面的代码,宏会顺利运行,但只有当用户选择否时才会过滤。

If MsgBox("Is This Item Catch Weight?", vbYesNo) = vbNo Then
    retval = InputBox("Please Enter PO Cost")
    ActiveSheet.Range("$A$1:$CL$293662").AutoFilter Field:=71,         Criteria1:="=" & retval
    retval = InputBox("Please Enter Net Weight")
    ActiveSheet.Range("$A$1:$CL$293662").AutoFilter Field:=41, Criteria1:="=" & retval
Else: MsgBox("Is This Item Catch Weight?", vbYesNo) = vbYes
    retval = InputBox("Please Enter PO Cost")
    ActiveSheet.Range("$A$1:$CL$293662").AutoFilter Field:=71, Criteria1:="=" & retval
End If
End If

1 个答案:

答案 0 :(得分:2)

这里发生了一些事情。 VBA代码中的:新行字符,所以像

这样的行
Else: MsgBox("Is This Item Catch Weight?", vbYesNo) = vbYes

实际上与

相同
Else
   MsgBox("Is This Item Catch Weight?", vbYesNo) = vbYes

这不是你想要的。

最后还有一个额外的End If。删除它。

调用消息框多次出现可能不是oyu想要的。可能你想显示消息框,得到结果,然后用它做点什么。

Dim response As VbMsgBoxResult
response = MsgBox("Is This Item Catch Weight?", vbYesNo)
If response = vbNo Then
    'do stuff for yes
ElseIf response = vbYes Then
    ' do stuff for No
End If

我建议不要使用ActiveSheet,除非你确定这是你想要的。