我在评论中包含了程序失败的内容。非常感谢您的帮助!谢谢!
Function sumByAcct(month As Integer, acct As String) As Long
Dim array_length As Integer
array_length = Application.WorksheetFunction.Count(Sheets("Transactions").Range("A:A")) + 1
ReDim array_data(array_length, 3) As Variant
For i = 0 To (array_length)
array_data(i, 1) = Sheets("Transactions").Range("A" & i + 2) '=> Dates
array_data(i, 2) = Sheets("Transactions").Range("E" & i + 2) '=> Amounts
array_data(i, 3) = Sheets("Transactions").Range("H" & i + 2) '=> Bank Account
Dim func_date As Date
Dim func_month As Integer
func_date = CDate((array_data(i, 1))) 'program doesn't run this code
func_month = month(CDate(func_date)) 'program doesn't run this code
MsgBox (func_date)
Next
End Function
答案 0 :(得分:1)
month
没有大写的事实是一个死的赠品。您的输入参数和VBA函数名称之间存在命名冲突。
更改参数名称:
Function sumByAcct(monthNum As Integer, acct As String) As Long
或明确引用Month函数:
func_month = VBA.Month(CDate(func_date))
您可能还应该在模块顶部放置Option Explicit
,然后使用Dim i As Long
进行跟进。
行func_date = CDate((array_data(i, 1)))
很好,假设它在A列中找到的所有值都是日期。我要先检查数据本身,要么在尝试投射之前测试它。