' ============================================================================== ' 类模块: clsErrorLogger ' 职责: 错误日志记录器 (修正版:移除UDT,使用数组存储) ' ============================================================================== Option Explicit Private pErrors As Collection Private Sub Class_Initialize() Set pErrors = New Collection End Sub ' 记录错误 Public Sub Record(RowIndex As Long, SourceFunc As String, ErrorType As String, Desc As String, Context As String) ' 使用数组存储单条错误信息:行号, 来源, 类型, 描述, 上下文 pErrors.Add Array(RowIndex, SourceFunc, ErrorType, Desc, Context) End Sub ' 是否有错误 Public Property Get HasErrors() As Boolean HasErrors = (pErrors.count > 0) End Property ' 输出报告到新工作表 Public Sub PrintReport(targetWb As Workbook) If pErrors.count = 0 Then Exit Sub Dim ws As Worksheet Set ws = targetWb.Worksheets.Add(After:=targetWb.Worksheets(targetWb.Worksheets.count)) ws.Name = "错误报告_" & Format(Now, "hhmmss") ' 表头 ws.Range("A1:E1").Value = Array("原表行号", "来源模块", "错误类型", "详细描述", "原始数据") ws.Range("A1:E1").Font.Bold = True ws.Range("A1:E1").Interior.Color = RGB(255, 200, 200) ' 准备输出数组 Dim arrOutput() As Variant ReDim arrOutput(1 To pErrors.count, 1 To 5) Dim i As Long Dim vItem As Variant For i = 1 To pErrors.count vItem = pErrors(i) arrOutput(i, 1) = vItem(0) arrOutput(i, 2) = vItem(1) arrOutput(i, 3) = vItem(2) arrOutput(i, 4) = vItem(3) arrOutput(i, 5) = vItem(4) Next i ws.Range("A2").Resize(UBound(arrOutput, 1), 5).Value = arrOutput ws.Columns.AutoFit End Sub