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

如何遍历Worksheet对象数组?VBA遍历代码执行异常求助

问题分析与解决

核心问题

你的代码中全局变量命名为sheets,和VBA内置的Sheets工作表集合对象重名,导致For Each sheet In sheets语句被错误解析为遍历内置的Sheets集合,而非你自定义的数组。此外,原错误处理逻辑会在出错时直接跳出流程,无法定位具体问题。

解决方案

1. 重命名全局变量,避免命名冲突

修改全局变量名,避开VBA内置对象名称:

  • Globals模块:
Option Explicit

Public targetWorksheets As Variant  ' 替换原sheets变量名
  • ThisWorkbook:
Option Explicit

Private Sub Workbook_Open()
    targetWorksheets = Array(Sheet4, Sheet5, Sheet7)
End Sub
  • WorkbookUtils模块:
Option Explicit

Public Sub UpdatePlan(ByVal sourceSheet As Worksheet)
    
    Dim i As Integer
    Dim sheet As Worksheet
    
    On Error GoTo ErrorHandler
    
    Debug.Print "Sheets:"
    For i = LBound(targetWorksheets) To UBound(targetWorksheets)
        Debug.Print targetWorksheets(i).Name
    Next i
    
    If sourceSheet.ProtectContents Then
        
        Application.EnableEvents = False
        
        Debug.Print "Looping through sheets"
        
        For Each sheet In targetWorksheets
            Debug.Print "Sheet name: " & sheet.Name
            CallByName sheet, "SheetMethod", VbMethod
        Next sheet
        
    End If
    
ExitSub:
    Application.EnableEvents = True
    Exit Sub
    
ErrorHandler:
    Debug.Print "错误代码:" & Err.Number & ",错误描述:" & Err.Description  ' 添加错误信息输出,便于定位问题
    Resume ExitSub
    
End Sub

2. 验证SheetMethod方法的存在性

确保Sheet4、Sheet5、Sheet7的代码模块中都定义了Public Sub SheetMethod(),否则CallByName会触发错误,导致循环提前终止。

3. 优化错误处理逻辑

原错误处理会直接跳过错误,添加错误信息输出后,能快速区分是遍历逻辑问题还是方法调用问题。

内容的提问来源于stack exchange,提问作者BadHorsie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 13:55:08