excel - 为什么嵌套循环会导致运行时错误 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
解决方案
根据 Vitaliy Prushak 的帖子的见解,我已将那段代码从 更改If Cells(I, PrGr) = Cells(I - 1, PrGr) Then
为 If Cells(I, PrGr).Text = Cells(I - 1, PrGr).Text Then
,因为单元格包含文本。这将问题进一步推到代码中,但使用相同的解决方案解决了。
宏现在可以正常运行,感谢您的帮助。
推荐阅读
- python - boost-python - 使用默认参数公开 C++(非纯)虚拟方法
- reactjs - 材质 UI:deck gl 覆盖网格
- java - 无法解析位置/'resources/
- python-3.x - Google Cloud Functions 对默认数据库中 Google Cloud Firestore 集合的读取权限的访问问题
- c++ - getline 函数不退出循环
- olap - 同一个维度表可以关联多个事实表吗?
- typescript - Loopback 4:发送相关数据
- pandas - 为什么我没有得到行的小计
- java - 如何在 Android Studio 中以字符串形式获取地图标记的位置?
- delphi - 除了“编译”选项之外,还有什么可以更改 64 位的代码生成?