【发布时间】:2020-07-10 00:09:08
【问题描述】:
我对其他编程语言(如 java 和 C++)最有经验。 VBA 对我来说仍然很新,我几乎不知道我在做什么。我试图从函数返回一个数组列表,但我不断收到错误 5 - 无效的过程调用或参数。
Dim months As ArrayList
Dim temp As Integer
Set months = New ArrayList
'Copy and Paste State and Quarter Specific Data
Sheets("The Data (2)").Select
ActiveSheet.Range("$A:$T").AutoFilter Field:=6, Criteria1:=stateName
months = getMonths(Year, Quarter)
ActiveSheet.Range("$A:$T").AutoFilter Field:=17, Criteria1:=months.Item(0), Operator:=xlOr, Criteria2:=months.Item(1), Operator:=xlOr, Criteria3:=months.Item(2)
Range("$A$1:$$T$1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Windows("State Rate Planning Template.xlsm").Activate
Sheets(3).Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Range("A1").Select
我在“months = getMonths(Year, Quarter)”处收到错误消息。 Year 和 Quarter 是在我这里的代码上方声明的字符串。
这里是getMonths函数:
Function getMonths(Year As String, Quarter As String) As ArrayList
Dim i As Integer
Dim month As String
Dim monthList As ArrayList
Set monthList = New ArrayList
If (StrComp(Quarter, "1", compare) = 0) Then
For i = 1 To 3
month = Year & "-0" & i
monthList.Add month
Next i
ElseIf (StrComp(Quarter, "2", compare) = 0) Then
For i = 4 To 6
month = Year & "-0" & i
monthList.Add month
Next i
ElseIf (StrComp(Quarter, "3", compare) = 0) Then
For i = 7 To 9
month = Year & "-0" & i
monthList.Add month
Next i
ElseIf (StrComp(Quarter, "4", compare) = 0) Then
For i = 10 To 12
month = Year & "-" & i
monthList.Add month
Next i
End If
Set getMonths = monthList
End Function
对于 VBA 新手的任何帮助将不胜感激 :)
【问题讨论】:
-
ArrayList不是 VBA 已知的数据类型。无需查看其余代码,请从Dim months As Variant开始。请注意,您不需要Select任何东西。 Range("$A$1:$$T$1").Select: Range(Selection, Selection.End(xlDown)).Select: Selection.Copy 的效果是Range("$A$1:$$T$1").Copy- 而$$T$1 是语法错误. -
我假设您添加了对 mscorlib.dll 的引用。即使这样,代码也无法编译。在每个模块/类的顶部添加 Option Explicit,然后是 Debug/Compile。更正您的代码并更新您的问题。
标签: excel vba function arraylist compiler-errors