#vba #outlook
#vba #outlook
Вопрос:
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 (для октября). Однако «DName» возвращается как «30», когда оно должно возвращаться как «31», когда mName равно «10».
Есть идеи, почему это запускает первую строку оператора If? Заранее спасибо!
Комментарии:
1. Дэвид дал вам отличный пример того, как использовать Or, но мне нравится использовать «Выбрать регистр» 😉
Ответ №1:
Or
Оператор в 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. Ах, теперь это имеет смысл. Большое спасибо за помощь и урок!
Ответ №2:
Каждый оператор 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».
Комментарии:
1. Большое спасибо за помощь и урок!