【发布时间】:2016-07-12 14:35:50
【问题描述】:
我一直在为我的工作解决这个问题。我正在尝试在 Excel 中创建与 NetworkDays 类似的函数。这将返回两个日期之间的工作日,不包括节假日。这是我重新输入并尝试调整以使其工作的代码示例。变量 dateInc 是一个递增的 var。当我尝试将值设置为等于 startDate 数字时,这似乎溢出了。这个 startdate 反过来会使 dateInc 从开始日期计算到结束日期。我只是不确定这是一个业余错误还是我需要了解的真正问题。我试图添加错误处理以跳过错误并恢复,但这只是所有这些。我对所有建设性的批评持开放态度,欢迎任何关于编码实践和解决方案的建议。
注意:我已尝试适应潜在的不均匀日期值与时间。尽管这并没有改变任何东西,而且我的数据恰好在日期值中没有时间。
Function Workdays(ByRef startDate As Date, ByRef endDate As Date) As Integer
Dim countDays&, dateInc#, startLong#, endLong#, strSQL$
Dim rs As Recordset
Dim db As Database
'intialize variables to avoid overflow|Note dates are converted to a double
countDays = 0
dateInc = 0
startLong = CDbl(startDate)
endLong = CDbl(endDate)
'SQL select statement
strSQL = "Select holDate from Holidays"
'Open database using SQL
Set db = CurrentDb
Set rs = db.OpenRecordset(strSQL)
'set the date comparison to the start date's number format
dateInc = startLong
Do Until dateInc = endLong
Select Case Weekday(CDate(dateInc))
Case vbSaturday
'Nothing happens
Case vbSunday
'Nothing happens
Case Else
rs.FindFirst ("holDate = # " & Format(CDate(dateInc), "mm/dd/yyyy") & "#")
If rs.NoMatch = True Then
countDays = countDays + 1
End If
End Select
dateInc = dateInc + 1
Loop
Set rs = Nothing
Set db = Nothing
dateInc = 0
Workdays = countDays
End Function
【问题讨论】:
-
您是否尝试过在开始时将变量声明为 Double?
-
@Benno Grimm 是的,我已经尝试过 long 和 double。它没有任何区别。 dateInc 数字似乎总是递增或以某种方式设置为最大值。
-
我真的不知道为什么会这样,但如果你知道发生溢出的行,用户 MsgBoxes 来检查变量的值(所有变量)和当前数据类型(msdn.microsoft.com/en-gb/library/s4zz68xc.aspx ).. 也许故障排除会在这里为您提供帮助
-
类型名有用我试试,谢谢!
-
希望您能找到错误(如果是这样,请考虑为未来遇到相同问题的用户发布答案;))
标签: vba date ms-access overflow