Excel VBA for循环和插入结果

Excel VBA for循环和插入结果,vba,loops,for-loop,insert,row,Vba,Loops,For Loop,Insert,Row,我制作了一个VBA应用程序,如果满足某些条件,则将结果提取到另一个工作表中,并插入一个空行,然后下一个提取下一个结果。我的VBA只提取第一个结果,不继续,有人能帮忙吗 Option Explicit Sub ClearCustomer() Dim i As Variant, j As Variant, k As Variant Dim LastRow As Long Dim LastRow2 As Long Dim LastRow3 As Lon

我制作了一个VBA应用程序,如果满足某些条件,则将结果提取到另一个工作表中,并插入一个空行,然后下一个提取下一个结果。我的VBA只提取第一个结果,不继续,有人能帮忙吗

    Option Explicit
    Sub ClearCustomer()

    Dim i As Variant, j As Variant, k As Variant
    Dim LastRow As Long
    Dim LastRow2 As Long
    Dim LastRow3 As Long
    Dim aFile As String
    Dim wb As Workbook
    Dim wshell
    Dim ws As Worksheet
    Dim ws1 As Worksheet
    Dim diff As Double
    Const tolerance As Long = 100

    Application.DisplayAlerts = False
    Application.ScreenUpdating = False

    aFile = ThisWorkbook.Path & "\FBL5N.XLSX"
         If Len(Dir$(aFile)) > 0 Then
         Kill aFile

    End If

    Set wshell = CreateObject("WScript.Shell")
    wshell.Run Chr(34) & "C:\Users\nxkan\Desktop\AUTO\FBL5N.vbs" & Chr(34), 1, 1

    On Error Resume Next
    Workbooks.Open Filename:=ThisWorkbook.Path & "\FBL5N.XLSX"

    Set wb = Workbooks("FBL5N.XLSX")

    Set ws = wb.Sheets("Sheet1")

    ws.Range("A:C,E:F,I:I,L:L").EntireColumn.Delete

    Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "FBL5N"

    Set ws1 = wb.Sheets("FBL5N")

    LastRow = ws.Range("F" & Rows.Count).End(xlUp).Row
    LastRow2 = ws.Range("G" & Rows.Count).End(xlUp).Row
    LastRow3 = ws1.Range("A" & Rows.Count).End(xlUp).Row

    For i = 2 To LastRow
              For j = 2 To LastRow2
                          For k = 1 To LastRow3
                          If ws.Cells(i, 6).Value = ws.Cells(j, 7).Value Then
                                             diff = Application.WorksheetFunction.SumIf(ws.Range(ws.Cells(2, 6), ws.Cells(i, 6)), ws.Cells(i, 6), ws.Range(ws.Cells(2, 4), ws.Cells(i, 4))) + Application.WorksheetFunction.SumIf(ws.Range(ws.Cells(2, 7), ws.Cells(j, 7)), ws.Cells(j, 7), ws.Range(ws.Cells(2, 4), ws.Cells(j, 4)))


                        If diff <= tolerance And diff >= -tolerance Then

                        ws1.Cells(k, 1).Value = ws.Cells(i, 1).Value
                        ws1.Cells(k, 2).Value = ws.Cells(i, 2).Value
                        ws1.Cells(k, 3).Value = ws.Cells(i, 3).Value
                        ws1.Cells(k, 4).Value = ws.Cells(i, 4).Value
                        ws1.Cells(k, 5).Value = ws.Cells(i, 5).Value
                        ws1.Cells(k, 6).Value = ws.Cells(i, 6).Value
                        ws1.Cells(k, 7).Value = ws.Cells(i, 7).Value

                        ws1.Cells(k + 1, 1).Value = ws.Cells(j, 1).Value
                        ws1.Cells(k + 1, 2).Value = ws.Cells(j, 2).Value
                        ws1.Cells(k + 1, 3).Value = ws.Cells(j, 3).Value
                        ws1.Cells(k + 1, 4).Value = ws.Cells(j, 4).Value
                        ws1.Cells(k + 1, 5).Value = ws.Cells(j, 5).Value
                        ws1.Cells(k + 1, 6).Value = ws.Cells(j, 6).Value
                        ws1.Cells(k + 1, 7).Value = ws.Cells(j, 7).Value

                        Exit For
                    End If
                 End If
              k = k + 3
           Next k
       Next j
   Next i

    'With ActiveSheet
            '.AutoFilterMode = False
            '.Range("A1:K1").AutoFilter Field:=7, Criteria1:="<>"
    'End With

    MsgBox "Finished"

    End Sub
选项显式
次级客户()
尺寸i为变型,j为变型,k为变型
最后一排一样长
暗淡的最后一行2一样长
最后一行的长度为3
像线一样模糊
将wb设置为工作簿
昏暗的地狱
将ws设置为工作表
将ws1设置为工作表
Dim diff为双精度
常量公差,长度=100
Application.DisplayAlerts=False
Application.ScreenUpdating=False
aFile=ThisWorkbook.Path&“\FBL5N.XLSX”
如果Len(Dir$(aFile))>0,则
杀戮
如果结束
设置wshell=CreateObject(“WScript.Shell”)
运行Chr(34)和“C:\Users\nxkan\Desktop\AUTO\FBL5N.vbs”&Chr(34),1,1
出错时继续下一步
工作簿。打开的文件名:=ThisWorkbook.Path&“\FBL5N.XLSX”
设置wb=工作簿(“FBL5N.XLSX”)
设置ws=wb.Sheets(“Sheet1”)
ws.Range(“A:C,E:F,I:I,L:L”).entireclumn.Delete
Worksheets.Add(在:=Worksheets(Worksheets.Count))之后)。Name=“FBL5N”
设置ws1=wb.Sheets(“FBL5N”)
LastRow=ws.Range(“F”和Rows.Count).End(xlUp).Row
LastRow2=ws.Range(“G”和Rows.Count).End(xlUp).Row
LastRow3=ws1.Range(“A”&Rows.Count).End(xlUp).Row
对于i=2到最后一行
对于j=2到最后一行2
对于k=1到最后一行3
如果ws.Cells(i,6).Value=ws.Cells(j,7).Value,那么
diff=Application.WorksheetFunction.SumIf(ws.Range(ws.Cells(2,6),ws.Cells(i,6)),ws.Cells(i,6),ws.Range(ws.Cells(2,4),ws.Cells(i,4))+Application.WorksheetFunction.SumIf(ws.Range(ws.Cells(2,7),ws.Cells(j,7),ws.Cells(j,7),ws.Range(ws.Cells(2,4),ws.Cells(j,4)))
如果差异=-公差,则
ws1.Cells(k,1).Value=ws.Cells(i,1).Value
ws1.Cells(k,2).Value=ws.Cells(i,2).Value
ws1.Cells(k,3).Value=ws.Cells(i,3).Value
ws1.Cells(k,4).Value=ws.Cells(i,4).Value
ws1.Cells(k,5).Value=ws.Cells(i,5).Value
ws1.Cells(k,6).Value=ws.Cells(i,6).Value
ws1.Cells(k,7).Value=ws.Cells(i,7).Value
ws1.Cells(k+1,1).Value=ws.Cells(j,1).Value
ws1.Cells(k+1,2).Value=ws.Cells(j,2).Value
ws1.Cells(k+1,3).Value=ws.Cells(j,3).Value
ws1.Cells(k+1,4).Value=ws.Cells(j,4).Value
ws1.Cells(k+1,5).Value=ws.Cells(j,5).Value
ws1.Cells(k+1,6).Value=ws.Cells(j,6).Value
ws1.Cells(k+1,7).Value=ws.Cells(j,7).Value
退出
如果结束
如果结束
k=k+3
下一个k
下一个j
接下来我
'使用ActiveSheet
'.AutoFilterMode=False
“.范围(“A1:K1”)。自动筛选字段:=7,标准1:=”
"以
MsgBox“已完成”
端接头

在下一步继续出错时注释掉
并查看结果happens@TimWilliams嗨,蒂姆,什么都没发生。如果没有看到你的任何数据,很难说问题出在哪里——也许只有一行符合你的标准?尝试在该内部循环中添加断点,看看它是否命中。抱歉,TIm,但我不知道如何添加…添加调试。打印代码以查看发生了什么(在每个“for to”的开头和结尾)跟踪变量“LastRow”、“LastRow2”、“LastRow3”和“diff”要查看值,请在错误恢复时提示
,然后执行下一步操作
,然后查看内容happens@TimWilliams嗨,蒂姆,什么都没发生。如果没有看到你的任何数据,很难说问题出在哪里——也许只有一行符合你的标准?尝试在该内部循环中添加断点,看看是否命中。抱歉,TIm,但我不知道如何添加…添加调试。打印代码以查看发生了什么(在每个“for to”的开头和结尾),跟踪变量“LastRow”、“LastRow2”、“LastRow3”和“diff”以查看值