2017-05-05 71 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