抽凭需要,VBA编了个功能,原始数据2里面超过28行就死循环了,求大神帮助。

Private Sub CommandButton1_Click()Dim lenth As Long
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim date1 As String
Dim voucher1 As String
Dim label1 As Integer
Dim label2 As Integer

k = 2lenth = Worksheets("原始数据2").[A65535].End(xlUp).Row - 1
For i = 1 To lenth
date1 = Worksheets("原始数据2").Cells(i + 1, 1).Value
voucher1 = Worksheets("原始数据2").Cells(i + 1, 2).Value
On Error Resume Next
label1 = Application.WorksheetFunction.Match(date1, Worksheets("原始数据1").Columns("A"), 0)
label2 = Application.WorksheetFunction.Match(voucher1, Worksheets("原始数据1").Columns("B"), 0)
While Worksheets("原始数据1").Cells(label1, 2) <> voucher1
label1 = label1 + 1
Wend
While Worksheets("原始数据1").Cells(label1, 2) = voucher1
For j = 1 To 10
Worksheets("处理1").Cells(k, j).Value = Worksheets("原始数据1").Cells(label1, j)
Next
k = k + 1
label1 = label1 + 1
Wend
Next
End Sub

你while循环没有定义什么时候停止循环,你这个while循环返回true和false,所以循环一直停不下来,为啥要用这么难理解的循环模式呢....你如果一个条件出发当前的while为true的话那这个while一直在循环,你的while判断条件来自你上层的循环,所以你当前的while里面的条件一直没有变,一直都是true,然后就一直在走,这个循环只有当false的时候才会跳出然后走你上层的循环好进行下一次的操作。很久不用这种写法不知道解释的对不对啊
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-03-25
k = 2lenth = Worksheets("原始数据2").[A65535].End(xlUp).Row - 1

2lenth是变量吗?
是不是这样的?
k = 2:lenth = Worksheets("原始数据2").[A65535].End(xlUp).Row - 1

Private Sub CommandButton1_Click()
Dim lenth As Long
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim date1 As String
Dim voucher1 As String
Dim label1 As Integer
Dim label2 As Integer
k = 2
lenth = Worksheets("原始数据2").[A65535].End(xlUp).Row - 1
For i = 1 To lenth-1‘这里减1试下
date1 = Worksheets("原始数据2").Cells(i + 1, 1).Value
voucher1 = Worksheets("原始数据2").Cells(i + 1, 2).Value
On Error Resume Next
label1 = Application.WorksheetFunction.Match(date1, Worksheets("原始数据1").Columns("A"), 0)
label2 = Application.WorksheetFunction.Match(voucher1, Worksheets("原始数据1").Columns("B"), 0)
While Worksheets("原始数据1").Cells(label1, 2) <> voucher1
label1 = label1 + 1
Wend
While Worksheets("原始数据1").Cells(label1, 2) = voucher1
For j = 1 To 10
Worksheets("处理1").Cells(k, j).Value = Worksheets("原始数据1").Cells(label1, j)
Next
k = k + 1
label1 = label1 + 1
Wend
Next
End Sub本回答被网友采纳
第2个回答  2013-03-25
把你的ab的定义区间换一下或者把.Cells(a, b)中的ab互换一下,你现在的判断区域不是A3:K22,横纵坐标弄反了。
另外,需要把下边这两句去掉好,因为你是检索十个条件,所以会影响结果,只保留A10的检索结果,并且影响速度。
Else
.Cells(a, b).Interior.ColorIndex = 0 '不符合的无底色
你好,我来为你解答:
相似回答