2017-05-05 2 views
0

私は現在、銀行の休日のリストを保持する辞書を使用しています。現在の1日が銀行休業日であるかどうかを確認したい場合は、前日が銀行休業日だったかどうかをチェックし、3日前が銀行休業日だった場合は(銀行休日で、前週金曜日だった場合など) ?Excel VBA辞書の日付を確認する

辞書の日付を確認する際に問題が発生しています。私は文字列を比較することができます(私のIFクエリが動作するように文字列として日付を宣言します)。

私の下のコードで日付を確認する方法を教えてもらえますか?

Public currentDate As Long 
Public Bankholiday As Boolean 
Public DoubleBank As Boolean 
Public asdfg As Date 
Public currentDay As String 
Public BankHolidays As Scripting.Dictionary 
Public DiaryDate As String 

そしてサブ次の作品は、変数タイプを変換することを私を発見した

Sub GetDate() 
'Created to determin if a Bank Holiday needs to be taken into account for 
Date to run 

currentDate = Date - 1 
Today = Date - 1 
currentDay = Format(Date, "dddd") 'writes day out as string e.g. Monday, 
Tuesday.... 
currentDate = Format(Date, "yyyymmdd") 'set format for SQL query 
DiaryDate = Format(Date - 1, "dd/mm/yyyy") 

'Set Dictionary Object 
Set BankHolidays = CreateObject("Scripting.Dictionary") 


'Add dates to Dictionary 
BankHolidays.Add "01/01/2017", "B1" 
BankHolidays.Add "02/05/2017", "B2" 
BankHolidays.Add "14/04/2017", "B3" 
BankHolidays.Add "17/04/2017", "B4" 
BankHolidays.Add "01/05/2017", "B5" 
BankHolidays.Add "29/05/2017", "B6" 
BankHolidays.Add "28/08/2017", "B7" 
BankHolidays.Add "25/12/2017", "B8" 
BankHolidays.Add "26/12/2017", "B9" 
BankHolidays.Add "01/01/2018", "B10" 
BankHolidays.Add "30/03/2018", "B11" 
BankHolidays.Add "02/04/2018", "B12" 
BankHolidays.Add "07/05/2018", "B13" 
BankHolidays.Add "28/05/2018", "B14" 
BankHolidays.Add "27/08/2018", "B15" 
BankHolidays.Add "25/12/2018", "B16" 
BankHolidays.Add "26/12/2018", "B17" 
BankHolidays.Add "04/05/2017", "B18" 
BankHolidays.Add "03/05/2017", "B18" 

'Check if Todays Date is in the dictionary 
If BankHolidays.Exists(DiaryDate) Then 
Today = Today - 1 
MsgBox "1" 
    'For instances of 2 consecutive bankholidays in a row (no weekend in  between) 
    If BankHolidays.Exists(Today) Then 
     Today = currentDate - 1 
     MsgBox "2" 
    End If 

'For instances of 2 consecutive bankholidays in a row (WITH weekend in  between) 
      If BankHolidays.Exists(Today - 2) Then 
       Today = currentDate - 1 
       MsgBox "3" 
      End If 

End If 

End Sub 

答えて

0

あります。最高または最もエレガントな方法であることが、働くようでないかもしれません: 注1新しい変数DiaryDate1は日付が以下

コード必要だったよう。また、仕事を

DiaryDate1 = CDate(DiaryDate) 'Pass DiaryDate1 the value of DiaryDate converted to a Date type 
DiaryDate1 = DiaryDate1 - 2  'Minus 2 days from DiaryDate1 
DiaryDate = CStr(DiaryDate1) 'Set DiaryDate the value of DiaryDate1 converted to a string type 
+0

テストされていないが、次のでしょうか? 'DiaryDate = CStr(CDate(DiaryDate)-2)' – Zerk

関連する問題