首页 > 解决方案 > 为什么嵌套循环会导致运行时错误 13?

问题描述

我编写了一个宏来构建大量数据并节省我手动打孔等数字。宏是分阶段编写的,每个部分都经过独立测试,然后集成到循环中或集成到它自己的主代码中 - 这种方式每段代码都经过测试,因此它的功能符合我的意图。

这部分代码的目标是循环遍历工作表中的每一行,如果第 9 列第 I 行的值与第 9 列第 I-1 行的值不同,那么它将插入一个新行(求和行)。此操作将在每个工作表中执行,因此是嵌套循环。当我单独编写这个宏时,没有嵌套循环,它运行良好。

编辑:要清除,代码插入一行当且仅当Cells(I, PrGr) = Cells(I - 1, PrGr)不相等。因此我问它们是否相同,如果它们相同,则什么也不做 - 否则,插入一行(即Cells(I, PrGr) = Cells(I - 1, PrGr)不相等。)

在嵌套循环中运行它会导致运行时错误 13,在“ If Cells(I, PrGr) = Cells(I - 1, PrGr) Then ”行中键入不匹配。在调试器中,当我强制它继续时,它会做它应该做的事情 - 在每个工作表中创建总和行。无论我将哪个工作表设置为起始工作表,都会发生这种情况。

我试图通过使用For Each ws In This..以及我现在拥有的逻辑For J = 1 to WS_ant来更改循环的逻辑。两者都会导致错误。我也四处寻找线索,但没有提出任何适合这个问题的解决方案。

有人知道这里发生了什么,以及如何解决吗?

编码:

Sub OI_SJ()

'Selects the first sheet
Sheets(1).Activate

'Loop through sheets
Dim J As Integer
Dim WS_ant As Integer

Dim starting_ws As Worksheet
Set starting_ws = ActiveSheet 'remember which worksheet is active in the beginning
WS_ant = ThisWorkbook.Worksheets.Count

    For J = 1 To WS_ant
        ThisWorkbook.Worksheets(J).Activate

        'If sheet = GRL, then terminate
        If ThisWorkbook.Worksheets(J).Name = "LL - Sv" Or ThisWorkbook.Worksheets(J).Name = "RM - Sv" Then

            'do something later

            ElseIf ThisWorkbook.Worksheets(J).Name = "GRL" Then GoTo Term5

            Else
                Dim I As Integer
                Dim PrGr As Long
                PrGr = 9

                Set aktivtark = ThisWorkbook.Worksheets(J)

                With aktivtark
                    sistekolonne = aktivtark.Cells(1, .Columns.Count).End(xlToLeft).Column
                    sisterad = aktivtark.Cells(.Rows.Count, "A").End(xlUp).Row
                End With

                Application.CutCopyMode = False
                Application.ScreenUpdating = False

                With aktivtark.Range("A6", Cells(sisterad, sistekolonne))
                    .RowHeight = 15

                End With
                Rows(1).RowHeight = 24

                For I = 6 To sisterad + 153

                If Cells(I, PrGr) = Cells(I - 1, PrGr) Then
                    ElseIf Cells(I, PrGr) = "PrGr" Then
                    Else
                        Rows(I).EntireRow.Insert
                        Cells(I, 12) = "SUM " & Cells(I - 1, PrGr).Value
                        Cells(I, 33).Formula = "=SUMIF(R7C9:R1500C9,MID(RC12,5,255),R7C:R1500C)"
                        Cells(I, 34).Formula = "=SUMIF(R7C9:R1500C9,MID(RC12,5,255),R7C:R1500C)"
                        Cells(I, 35).Formula = "=SUMIF(R7C9:R1500C9,MID(RC12,5,255),R7C:R1500C)"
                        Cells(I, 36).Formula = "=SUMIF(R7C9:R1500C9,MID(RC12,5,255),R7C:R1500C)"
                        Cells(I, 37).Formula = "=SUMIF(R7C9:R1500C9,MID(RC12,5,255),R7C:R1500C)"
                        Cells(I, 38).Formula = "=SUMIF(R7C9:R1500C9,MID(RC12,5,255),R7C:R1500C)"
                        Cells(I, 39).Formula = "=SUMIF(R7C9:R1500C9,MID(RC12,5,255),R7C:R1500C)"
                        Cells(I, 40).Formula = "=SUMIF(R7C9:R1500C9,MID(RC12,5,255),R7C:R1500C)"
                        Cells(I, 41).Formula = "=SUMIF(R7C9:R1500C9,MID(RC12,5,255),R7C:R1500C)"
                        Cells(I, 42).Formula = "=SUMIF(R7C9:R1500C9,MID(RC12,5,255),R7C:R1500C)"
                        Cells(I, 43).Formula = "=SUMIF(R7C9:R1500C9,MID(RC12,5,255),R7C:R1500C)"
                        Cells(I, 44).Formula = "=SUMIF(R7C9:R1500C9,MID(RC12,5,255),R7C:R1500C)"
                        Rows(I).RowHeight = 17.25
                        I = I + 1
                End If

            Next

            Application.CutCopyMode = True
            Application.ScreenUpdating = True

        End If

Cycle:
    Next

Term5:
starting_ws.Activate 'activate the worksheet that was originally active

End Sub

标签: excelvba

解决方案


根据 Vitaliy Prushak 的帖子的见解,我已将那段代码从 更改If Cells(I, PrGr) = Cells(I - 1, PrGr) ThenIf Cells(I, PrGr).Text = Cells(I - 1, PrGr).Text Then,因为单元格包含文本。这将问题进一步推到代码中,但使用相同的解决方案解决了。

宏现在可以正常运行,感谢您的帮助。


推荐阅读