【问题标题】:What aspect of loops causes VBA code to crash Excel?循环的哪些方面导致 VBA 代码使 Excel 崩溃?
【发布时间】:2013-06-07 20:36:36
【问题描述】:
'MERGE TITLES

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

For mrgst = 0 To ChartLCN

    If ActiveCell.Offset(-1, mrgst) <> "" Then
        mrg = mrgst + 1

        Do While ActiveCell.Offset(-1, mrg) = ""

                 Range(Cells(ActiveCell.Offset(-1, mrgst).Row, ActiveCell.Offset(-1, mrgst).Column), Cells(ActiveCell.Offset(-1, mrg).Row, ActiveCell.Offset(-1, mrg).Column)).Merge
                  mrg = mrg + 1

        Loop
    End If


Next mrgst

您好,stackoverflow 和 VBA 的新手,我有相当长的 VBA 代码在我添加此代码时崩溃。我试图用这个循环做的是将两个非空单元格之间的空单元格合并到留下非空单元格(对不起,不知道怎么说更好)。

|_ _ _ _ _ |_ _ _ _ _|_ _   =>  |........|........|...

(.......Connected to left pipe)

我在代码中使用了 do-loops,它们中的大多数都可以正常工作,当它们崩溃时,我只使用了 for-next 循环。我该怎么做才能使这件作品正常工作并避免 excel 出现白屏和崩溃?

感谢您的宝贵时间。

【问题讨论】:

  • 嗯,我可以看到,在 For 循环开始后的第一行,您将 Range 对象与字符串进行比较。 Activecell.Offset(-1,mrgst) "" 不起作用。 Activecell.Offset(-1,mrgst).Value "" 会。
  • @rwisch45 - 这不是问题:默认的 Range 属性是 Value,因此您不需要显式添加它。
  • @Tim Williams - 每天学习新东西!
  • 如果你是 Do 循环“崩溃”`,那是因为你没有正确地为 Exit 循环提供方法,或者因为你没有考虑到潜在的错误(众所周知,Excel 讨厌工作合并单元格,例如 one),而不是因为 Loop 中的某些固有的不稳定性。请修改您的问题以说明引发了什么错误,以及代码的哪一行引发了错误(如果有的话):)

标签: excel vba loops merge


【解决方案1】:
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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-30
    • 1970-01-01
    • 1970-01-01
    • 2017-12-01
    • 1970-01-01
    • 2012-05-26
    相关资源
    最近更新 更多