excel在end with和for循环之间崩溃?

excel在end with和for循环之间崩溃?,excel,vba,crash,Excel,Vba,Crash,随机添加一行会使我的excel崩溃 碰撞可能发生在结束时或从rij=4到最后一行 与在两行之间暂停30秒相比,在两行之间快速调试会使程序更快崩溃 我在不同的模块中有完全相同的代码,它确实在那里工作 当我调试lastrow时,它的值为5,所以问题不可能是Rij>lastrow 代码: Option Explicit Dim lastRow As Long Dim IngevuldeCellen As Integer Dim Ingevuld As Integer Dim Rij As

随机添加一行会使我的excel崩溃

  • 碰撞可能发生在
    结束时
    从rij=4到最后一行

  • 与在两行之间暂停30秒相比,在两行之间快速调试会使程序更快崩溃

  • 我在不同的模块中有完全相同的代码,它确实在那里工作

  • 当我调试lastrow时,它的值为5,所以问题不可能是
    Rij>lastrow

代码:

Option Explicit

Dim lastRow As Long
Dim IngevuldeCellen As Integer
Dim Ingevuld As Integer
Dim Rij As Integer
Dim tbl As Object
Dim AantalRijen As Integer
Dim laatsteRij As Long

Private Sub WorkSheet_Change(ByVal Target As Range)
     'Als laatste rij 6 ingevulde velden heeft doe dit
    lastRow = Cells(Cells.Rows.Count, "B").End(xlUp).Row
    IngevuldeCellen = WorksheetFunction.CountA(Range("B" & lastRow & ":G" & lastRow))
    If IngevuldeCellen >= 4 Then
        Call Module3.AddRowToBottom
        Range("F1:F" & lastRow).Interior.Color = RGB(59, 148, 0)
        Range("A1:A" & lastRow).Interior.Color = RGB(59, 148, 0)

    ElseIf IngevuldeCellen < 4 Then
    Range("A" & lastRow).Interior.Color = RGB(255, 0, 0)
    Range("F" & lastRow).Interior.Color = RGB(255, 0, 0)
    End If
    
    
    Ingevuld = WorksheetFunction.CountA(Range("H6:O18"))
    If Ingevuld >= 10 Then
        With Sheets("Ruimtelijst")
            lastRow = .Cells(Cells.Rows.Count, "G").End(xlUp).Row
        End With
        For Rij = 4 To lastRow
            If Not Intersect(Target, Blad3.ListObjects("tbl_" & Rij - 3).Range) Is Nothing Then
                'Zoek de laatste rij van de tabel op
                Set tbl = Blad3.ListObjects("tbl_" & Rij - 3)
                AantalRijen = tbl.Range.Rows.Count
                laatsteRij = tbl.Range.Cells(AantalRijen, "E").Row
                'Roept module
                Call Module3.AddRow(laatsteRij)
            End If
        Next Rij
    End If
End Sub
选项显式
最后一排一样长
Dim IngevuldeCellen为整数
Dim Ingevuld作为整数
Dim Rij作为整数
作为对象的Dim tbl
Dim AantalRijen作为整数
暗淡的laatsteRij和长的一样
私有子工作表_更改(ByVal目标作为范围)
“我的名字是6号,你的名字是什么
lastRow=单元格(Cells.Rows.Count,“B”)。结束(xlUp)。行
IngevuldeCellen=WorksheetFunction.CountA(范围(“B”&lastRow&“:G”&lastRow))
如果IngevuldeCellen>=4,则
调用Module3.addrowtobttom
范围(“F1:F”和lastRow).Interior.Color=RGB(59,148,0)
Range(“A1:A”和lastRow).Interior.Color=RGB(591480)
ElseIf IngevuldeCellen<4则
Range(“A”和lastRow).Interior.Color=RGB(255,0,0)
Range(“F”和lastRow).Interior.Color=RGB(255,0,0)
如果结束
Ingevuld=WorksheetFunction.CountA(范围(“H6:O18”))
如果Ingevuld>=10,则
附页(“Ruimtelijst”)
lastRow=.Cells(Cells.Rows.Count,“G”).End(xlUp).Row
以
对于Rij=4至最后一行
如果不相交(Target,Blad3.ListObjects(“tbl_3;”和Rij-3.Range)则为空
“Zoek de laatste rij van de tabel op
设置tbl=Blad3.ListObjects(“tbl_u3;”和Rij-3)
AantalRijen=tbl.Range.Rows.Count
laatsteRij=待测范围单元格(AantalRijen,“E”).行
“Roept模块
调用Module3.AddRow(laatsteRij)
如果结束
下一个Rij
如果结束
端接头

多亏了Teamothy,我发现VBA模块可能会随机损坏。我通过复制所有代码并将其粘贴到新的电子表格中解决了这个问题。

它看起来不像是完整的代码,请先粘贴所有代码行。@Teamothy编辑了它。没想到你需要完整的代码,因为它没有任何问题。如果它任意崩溃,你可能有一个损坏的编译模块,VBA是臭名昭著的这一点。如果是这样的话,我所知道的唯一修复方法就是创建一个新的电子表格,从现有模块复制代码,将其粘贴到新工作簿中的新模块中,编译并保存。我的意思是,它是任意的,在
结尾之前不会崩溃,问题开始出现在
end with
for rij=4 to lastrow
行之间,因为在
处,如果不相交(Target,Blad3.ListObjects(“tbl_”&rij-3.Range”),则不算什么
行,如果任意,即使是在一行中(但该行不应该崩溃),尝试模仿@Ethan所说的,或者尝试用