第二次运行时VBA循环退出循环

时间:2014-02-04 14:02:00

标签: excel excel-vba vba

我需要一些VBA的帮助。下面的代码对一堆数据进行了排序,这些数据是恐怖地传播然后将它们垂直地放在下面,我在下面发布了这些数据:

Sub Test()

    Application.ScreenUpdating = False

    countrow = ActiveSheet.UsedRange.Rows.Count
    countcolumn = ActiveSheet.UsedRange.Columns.Count
    numberofiterations = countcolumn / 6

    MsgBox "Number of Rows is" & Str(countrow)
    MsgBox "Number of Column is" & Str(countcolumn)

    ActiveSheet.Select

    a = 1
    b = 1
    c = 6
    d = 1

    While n < numberofiterations

        Range(Cells(a, b), Cells(countrow, c)).Select
        Selection.Copy

        Sheets(2).Select
        ActiveSheet.Cells(d, 1).Select
        Sheets(2).Paste

        Sheets(1).Select

        b = b + 6
        c = c + 6
        d = d + countrow

        n = n + 1

    Wend

End Sub

它运行一次,但是当它第二次运行时,它会直到线路:

While n < numberofiterations

我找不到它第二次掉出循环的原因。任何帮助都将受到支持

谢谢,

1 个答案:

答案 0 :(得分:1)

需要考虑的一些事项:

1)请初始化n的值。也就是说,在开始循环之前,设置

n = 0

明确。如果您稍后添加了将n设置为某个值的其他代码,则无法获得预期的结果

2)当你说

countrow = ActiveSheet.UsedRange.Rows.Count
Range(Cells(a, b), Cells(countrow, c)).Select

如果使用的范围没有在行开始,则不会一直选择到范围的底部1.如果UsedRange = $Q1:Z20,则UsedRange.Rows.Count = 10,不是26!

第二点可能不是你今天的问题 - 但我想指出它,因为它会再次咬你。

3)我非常喜欢写作

Option Explicit

位于每个模块的顶部。它会强迫您对所创建的每个变量进行深思熟虑,并且更有可能让您记住初始化变量。一般来说,这是一种很好的做法,应该在你的清单上“使用前初始化”。