excel - 调用返回 ArrayList 的函数
问题描述
我对其他编程语言(如 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新手的任何帮助将不胜感激:)
解决方案
将错误行更改为
Set months = getMonths(Year, Quarter)
你不需要这条线
Set months = New ArrayList
months
持有对对象的引用(使用 c++ 和 java 术语)并设置该引用,您需要使用 VBA 的Set
关键字。
编辑:
如果你使用 @Variatus 的getMonths()
函数(它返回 VBA 自己的函数,Array
我很确定你可以像这样简化你的过滤器:
ActiveSheet.Range("$A:$T").AutoFilter Field:=17, Criteria1:=months
这没有经过测试,我需要进行更正,因为阵列可能需要是一个乱七八糟的阵列。但是尝试一下也无妨。
推荐阅读
- javascript - 试图弄清楚如何使用 Puppeteer 根据类名提取 DOM 元素的集合
- javascript - 返回对象的笑话模拟函数
- node.js - 使用 try/catch 进行两次等待
- laravel - Laravel livewire 不处理广播中的监听器
- windows - 使用 MinGw64 和 CodeLite 运行我的程序太慢了
- python - 试图让这个网络爬虫根据用户输入打印一首特定的歌曲
- python - 在 manim 中绘制 2 个函数的交集
- vb.net - 为什么我没有使用 response.transmitfile 获得保存选项?
- javascript - 为什么这个 cCryptoGS AES 加密给出的所有密文几乎相同?
- python - 如何使用 Python 将 csv 数据解析为表格