VBA获取工作表名称返回数组时出现类型不匹配编译错误
获取Excel工作表名称的VBA函数错误修复
错误根源
编译错误「类型不匹配」的直接触发点是代码最后一行sheetCount = result:sheetCount是整数类型变量,result是字符串数组,两者类型无法兼容赋值。更关键的是这行逻辑完全错误——你需要将数组返回给函数,应该给函数名sheetNames赋值数组,而非给sheetCount赋值。
此外代码还有两处潜在问题:
- 数组下标逻辑偏差:VBA默认数组下标从0开始,
ReDim result(sheetCount)会创建包含sheetCount+1个元素的数组(下标0到sheetCount),但循环从1到sheetCount,导致result(0)始终为空。 Sheets集合包含工作表、图表等所有表对象,若仅需普通工作表,建议使用Worksheets集合。
修复后的代码
Public Function sheetNames() As String() Dim sheetCount As Integer sheetCount = ActiveWorkbook.Worksheets.Count ' 调整数组下标为1开始,和工作表序号对应 Dim result() As String ReDim result(1 To sheetCount) Dim i As Integer For i = 1 To sheetCount result(i) = ActiveWorkbook.Worksheets(i).Name Debug.Print result(i) & " : " & ActiveWorkbook.Worksheets(i).Name Next i ' 将数组赋值给函数名,作为返回值 sheetNames = result End Function
可选优化(返回0起始数组)
如果更习惯VBA标准的0起始数组,可以修改循环逻辑:
Public Function sheetNames() As String() Dim sheetCount As Integer sheetCount = ActiveWorkbook.Worksheets.Count ReDim result(0 To sheetCount - 1) Dim i As Integer For i = 0 To sheetCount - 1 result(i) = ActiveWorkbook.Worksheets(i + 1).Name Debug.Print result(i) & " : " & ActiveWorkbook.Worksheets(i + 1).Name Next i sheetNames = result End Function
内容的提问来源于stack exchange,提问作者Tugalsan Karabacak
相关产品推荐
相关产品推荐

