将工作簿所有工作表存入数组时出现运行时错误438
问题修复方案
核心错误点
- 遍历对象错误:直接遍历
OpenBook(Workbook对象)无效,Workbook不是可直接遍历的工作表集合,必须指定Worksheets属性才能遍历工作表,这是ws变量显示为Nothing的根本原因。 - 数组未初始化:动态数组
sheetNames()在赋值前未分配内存,直接写入会触发下标越界错误。
修正后的代码
FormatImport 过程
Public Sub FormatImport(ByVal OpenBook As Workbook) Dim ws As Worksheet Dim i As Integer Dim sheetNames() As Variant Dim strg As String strg = OpenBook.Name Debug.Print strg ' 初始化数组,匹配目标文件的工作表数量 ReDim sheetNames(0 To OpenBook.Worksheets.Count - 1) i = 0 ' 遍历Worksheets集合而非Workbook对象 For Each ws In OpenBook.Worksheets sheetNames(i) = ws.Name i = i + 1 Next ws ' 可选:打印数组内容验证结果 For i = LBound(sheetNames) To UBound(sheetNames) Debug.Print sheetNames(i) Next i End Sub
GetImport 过程(仅补充屏幕更新恢复)
Private Sub GetImport() Dim FileToOpen As Variant Dim OpenBook As Workbook Application.ScreenUpdating = False FileToOpen = Application.GetOpenFilename(Title:="Browse for File") If FileToOpen <> False Then Set OpenBook = Application.Workbooks.Open(FileToOpen) Call FormatImport(OpenBook) OpenBook.Close True End If Application.ScreenUpdating = True ' 恢复屏幕更新,避免Excel界面卡顿 End Sub
补充说明
- 若需包含图表工作表等非普通工作表,可将
OpenBook.Worksheets替换为OpenBook.Sheets。 - 数组初始化时用
ReDim指定大小,确保有足够存储空间存放所有工作表名称。 - 操作完成后恢复
ScreenUpdating为True,避免Excel界面长期处于无响应状态。
内容的提问来源于stack exchange,提问作者Koopa_6 GHG
相关产品推荐
相关产品推荐

