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语句的第一行?提前谢谢!
答案 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”。