我提供了两个输入参数。开始和结束。这些日期的格式为mm / dd / yyyy。
我想将此日期范围(包括开始和结束日期)之间的工作日存储到字典中。我有以下代码。
我收到编译错误:ByRef参数类型不匹配
我不知道开始存储的类型是什么。也许是弦吗?在excel输入表中,尽管我将其格式化为日期dd / mm / yyyy。
我有两个问题:
startd
才能使用IsWeekend
函数?为我提供的原始行有For n = startd To endd: WDdict(n) = 1: Next
。如何阅读这一衬里语法?我不知道WDdict(n) = 1:
在这里做什么。有人可以解释吗?
startd = Sheet1.Range("startd")
...
...
Dim WDdict As New Scripting.dictionary
For n = startd To endd: iff IsWeekend(startd) = True, WDdict(n) = 1: Next
....
....
Public Function IsWeekend(InputDate As Date) As Boolean
Select Case Weekday(InputDate)
Case vbSaturday, vbSunday
IsWeekend = True
Case Else
IsWeekend = False
End Select
End Function
答案 0 :(得分:0)
因此,我在这里看到了两个问题,并提出了一些建议,以使代码更清晰,更易于排除故障。
1)使用Option Explicit
并强制变量具有强类型。这将帮助您了解正在传递给函数的内容。
2)您使用的for循环语法有点混乱。我会使用更标准的屏蔽功能。
3)在循环中,您始终在检查startd
是否是周末。这将始终返回与startd
相同的答案,因为您在循环时没有更改。 (n
将会改变)
对您的代码在做什么进行一些猜测,我提出了以下解决方案:
Option Explicit
Sub ClientCode()
Dim startD As Date
Dim endD As Date
Dim dict As Dictionary
Dim n As Date
Set dict = New Dictionary
startD = CDate(Sheet1.Range("startd"))
endD = CDate(Sheet1.Range("endd"))
For n = startD To endD
If IsWeekend(n) Then
dict(n) = 1
End If
Next n
End Sub
Public Function IsWeekend(InputDate As Date) As Boolean
Select Case Weekday(InputDate)
Case vbSaturday, vbSunday
IsWeekend = True
Case Else
IsWeekend = False
End Select
End Function
在我的sheet1上有两个命名范围,它们的作用类似于输入单元格。它将加载包含周末日期的键值的字典。您仅将数字1
分配为字典中的值的事实可能表明您可以使用简单的VBA.Collection
对象而不是字典。但是,也许您对字典的实际使用隐藏在示例的...
中。