循环的哪个方面导致VBA代码崩溃Excel?

循环的哪个方面导致VBA代码崩溃Excel?,excel,vba,loops,merge,Excel,Vba,Loops,Merge,我在代码中使用了do循环,大多数循环都工作得很好,当它们崩溃时,我只用于下一个循环。我能做些什么来让这篇文章起作用并避免excel变成白色屏幕和崩溃 谢谢您的时间。我可以看到,在for循环开始后的第一行,您正在将范围对象与字符串进行比较。Activecell.Offset(-1,mrgst)“”不起作用。Activecell.Offset(-1,mrgst).Value“”将是。@rwisch45-这不是问题:默认范围属性是Value,因此您不需要显式添加它。@Tim Williams-每天学习

我在代码中使用了do循环,大多数循环都工作得很好,当它们崩溃时,我只用于下一个循环。我能做些什么来让这篇文章起作用并避免excel变成白色屏幕和崩溃


谢谢您的时间。

我可以看到,在for循环开始后的第一行,您正在将范围对象与字符串进行比较。Activecell.Offset(-1,mrgst)“”不起作用。Activecell.Offset(-1,mrgst).Value“”将是。@rwisch45-这不是问题:默认范围属性是
Value
,因此您不需要显式添加它。@Tim Williams-每天学习新知识!如果您是
Do
loops“crash”`这是因为您没有正确提供退出
循环的方法,或者因为您没有考虑到潜在的错误(例如,Excel众所周知地讨厌使用合并的单元格),而不是因为
loop
中存在一些固有的不稳定性。请修改您的问题,以说明出现了什么错误,以及代码的哪一行出现了错误(如果有:)
|_ _ _ _ _ |_ _ _ _ _|_ _   =>  |........|........|...

(.......Connected to left pipe)
|_ _ _ _ _ |_ _ _ _ _|_ _   =>  |........|........|...

(.......Connected to left pipe)
Sub Tester()

Dim ChartLCN As Long, mrgst As Long, mrg As Long, col As Long
Dim c As Range, c2 As Range
Dim bDone As Boolean

    ChartLCN = ActiveSheet.Cells(ActiveCell.Row, Columns.Count).End(xlToLeft).Column

    Set c = ActiveCell.Offset(-1, 0)

    Do While Not bDone

        Set c2 = c.End(xlToRight).Offset(0, -1)
        If c2.Column > ChartLCN Then
            Set c2 = ActiveSheet.Cells(c2.Row, ChartLCN)
            bDone = True
        End If
        col = c2.Column + 1

        If c2.Column > c.Column Then ActiveSheet.Range(c, c2).Merge

        Set c = ActiveSheet.Cells(c.Row, col)
    Loop
End Sub