2016-10-11 8 views
1
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フォルダに保存されます。VBA Outlookスクリプト - 誤った値を返すOr文の場合

問題は、使用する月末日を決定するときに発生します。 "MName"は10(10月)です。ただし、 "DName"は、MNameが "10"のときに "31"として返す必要がある場合は "30"と返します。

If文の最初の行がトリガーされる理由は何ですか?前もって感謝します!

+0

Davidさんは、Orの使い方について素晴らしい例を示しましたが、「Select Case」を使用するのが好きです;-) – 0m3r

答えて

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 
+0

ああ、それは今や理にかなっています。ヘルプとレッスンに感謝します。 – TeaParty

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"を配置します。

+0

おかげさまで、助けやレッスンに感謝します! – TeaParty

関連する問題