2017-05-05 136 views
0

我正在使用字典來存放銀行假期列表。我想檢查當前的1日是否是銀行假期,如果是這樣的話,檢查前一天是否是銀行假期,以及如果前3天是銀行假期(例如,週一是銀行假期,以及上週五) ?在Excel中檢查日期VBA詞典

我在檢查字典中的日期時遇到問題。我可以比較字符串(聲明日期作爲字符串,所以我的IF查詢工作),但我不能那麼從這個日期-1或-3,因爲它是一個字符串。

任何人都可以告訴我如何檢查下面的代碼中的日期嗎?

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