【发布时间】:2017-02-13 12:01:40
【问题描述】:
我正在尝试创建一个函数,用于在 subs 中创建一个月中实际天数的数组。我无法通过直接使用即时窗口或使用子窗口来运行该功能。该函数的代码如下(Debug.Print 实例已被删除,因为它们甚至从未触发):
Function GenererDager(ByVal month As Integer, ByVal year As Integer) As Integer
Dim dateFormat As String, daysArr() As Integer, actualDays As Integer
actualDays = 1
' Find the number of actual days in given month
For dayCheck = 1 To 31
dateFormat = month & "/" & dayCheck & "/" & year ' mm/dd/yyyy format
If IsDate(dateFormat) Then
actualDays = actualDays + 1
Else
Exit For
End If
Next dayCheck
' Redimension the array with the actual number of days in the month
ReDim daysArr(actualDays)
' Populate the array with the correct number of days
For daysToArray = 1 To actualDays
daysArr(daysToArray) = daysToArray
Next daysToArray
GenererDager = daysArr
End Function
使用带有GenererDager(2, 2017) 的即时窗口运行该函数会产生以下错误消息:Compile error: Expected: =
使用带有?GenererDager(2, 2017) 的即时窗口运行该函数会产生以下错误消息:Compiler error: Type mismatch 并选择了最后一次使用 daysArr
我用来调用函数的 test-sub 如下所示:
Sub HentDager()
Dim daysArray() As Integer
daysArray = GenererDager(2, 2017)
Debug.Print daysArray(4)
End Sub
在即时窗口中使用HentDager() 调用此子会产生以下错误:Compile error: Expected: =
我已经被这个问题困扰了一段时间,并且我已经多次重写代码以识别问题,但到目前为止我一直无法解决它。我可能会产生比我在此过程中修复的错误更多的错误,因为我意识到我不知道我现在真正在做什么:-)
【问题讨论】:
-
您规定该函数返回一个整数,但期望它返回一个数组。
-
另一点要提出的是,您使用实际天数的值重新调整 daysArr。鉴于选项基本默认值为 0,那么您实际上将其标注为(0 到 x),然后将其视为 1 的基数。理想情况下,使用 Redim daysArr(1 to actualDays) 适当地设置您的最小值/最大值。