You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将工作簿所有工作表存入数组时出现运行时错误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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 02:05:08