我需要一些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
我找不到它第二次掉出循环的原因。任何帮助都将受到支持
谢谢,
答案 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
位于每个模块的顶部。它会强迫您对所创建的每个变量进行深思熟虑,并且更有可能让您记住初始化变量。一般来说,这是一种很好的做法,应该在你的清单上“使用前初始化”。