如何用Excel VBA函数返回工作表数组?求函数类型定义指导
VBA函数返回Worksheet数组的类型定义修正
你的问题核心是函数返回类型与实际返回值不匹配——当前函数声明返回单个Worksheet对象,但你需要返回的是Worksheet类型的数组。以下是修正方案:
关键修正点
- 函数返回类型声明:将
As Worksheet改为As Worksheet(),明确返回Worksheet数组。 - 数组赋值方式:单个工作表对象赋值给数组元素时用
Set,但整个数组赋值给函数名时直接用=,不需要Set。
修正后的完整代码示例
Public Function fctListeFeuillesArray() As Worksheet() Dim ar1() As Worksheet Dim targetWs As Worksheet Dim index As Integer ' 示例逻辑:收集所有可见工作表,可替换为你的筛选逻辑 index = 0 ' 先初始化数组大小,后续可根据实际数量调整 ReDim ar1(0 To ThisWorkbook.Sheets.Count - 1) For Each targetWs In ThisWorkbook.Sheets ' 这里可以加筛选条件,比如只包含特定名称的工作表 ' If targetWs.Name Like "Data*" Then Set ar1(index) = targetWs index = index + 1 ' End If Next targetWs ' 调整数组大小以匹配实际收集到的工作表数量 If index > 0 Then ReDim Preserve ar1(0 To index - 1) Else ' 处理没有符合条件的工作表的情况,返回空数组 ReDim ar1(0 To -1) End If ' 直接将数组赋值给函数 fctListeFeuillesArray = ar1 End Function
使用说明
修正后即可直接执行Sheets(fctListeFeuillesArray()).Select,函数返回的Worksheet数组会被Sheets集合识别,从而选中所有目标工作表。
内容的提问来源于stack exchange,提问作者user2151292
相关产品推荐
相关产品推荐

