VBA Outlook脚本 - 如果Or语句返回错误值

时间:2016-10-11 13:19:35

标签: vba outlook outlook-vba

 MName = Format(dtDate, "mm", vbUseSystemDayOfWeek, vbUseSystem)

 If MName = "04" Or "06" Or "09" Or "11" Then 
        DName = "30"
    ElseIf MName = "02" Then
        DName = "28"
    ElseIf MName = "01" Or "03" Or "05" Or "07" Or "08" Or "10" Or "12" Then
        DName = "31"
    Else
 End If

我正在创建此脚本以将电子邮件附件保存到基于月末命名的文件夹。例如,如果电子邮件是在10-25-16发送的,则会将其保存到10-31-16文件夹中。

确定要使用的月末日时会出现此问题。 “MName”等于10(10月)。但是,当“MName”等于“10”时,“DName”返回“30”时返回“31”。

为什么这会触发If语句的第一行?提前谢谢!

2 个答案:

答案 0 :(得分:2)

那不是Or operator works in VBA的方式。 Or是一个布尔运算符,其工作方式如下:

> result = expression1 Or expression2

在您的情况下,您有:

If MName = "04" Or "06" ... 

在这种用法中," 06"本身就是一种表达,你说的是:

If (MName = "04") Or ("06") Or (expression3) Or ...

所以这就是为什么你的结果不符合预期。

请考虑使用Case语句:

Select Case MName
    Case "04", "06", "09", "11"
        Dname = "30"
    Case "30"
        DName = "28"
    Case "01", "03", "05", "07", "08", "10", "12"
        DName = "31"
    Case Else
        DName = "" 'Modify if needed...
End Select

使用If语句执行此操作非常麻烦。

 If MName = "04" Or MName = "06" Or MName = "09" MName = Or MName = "11" Then 
        DName = "30"
    ElseIf MName = "02" Then
        DName = "28"
    ElseIf MName = "01" Or MName = "03" Or MName = "05" _
                    Or MName = "07" Or MName = "08" Or MName = "10" Or MName = "12" Then
        DName = "31"
    Else
 End If

答案 1 :(得分:1)

每个OR运算符都会启动一个新条件,因此您必须为每个运算符添加MName =。

MName = Format(dtDate, "mm", vbUseSystemDayOfWeek, vbUseSystem)

 If MName = "04" Or MName = "06" Or MName = "09" Or MName = "11" Then 
        DName = "30"
    ElseIf MName = "02" Then
        DName = "28"
    ElseIf MName = "01" Or MName = "03" Or MName = "05" Or MName = "07" Or MName = "08" Or MName = "10" Or MName = "12" Then
        DName = "31"
    Else
 End If

使用CASE功能可能会更好。

MName = Format(dtDate, "mm", vbUseSystemDayOfWeek, vbUseSystem)

Select Case CInt(MName)
    Case 4 To 5
        Debug.Print "hi"
    Case 6, 7, 8
        Debug.Print "ho"
    Case 9 To 10
        Debug.Print "hum"
    Case Else
        Debug.Print "error!"
End Select

而不是我的debug.print,你放置DName =“XX”。