因此,我正在尝试使用For Loop
和If Then
语句对数据进行抽取和排序。该声明的目的是采取我的标准,并查看相匹配的事物的数据。如果它们匹配,则它将该数据中的值复制到列中。我有三组标准来查看相同的数据。每个标准都有3个字符串和一个日期范围。使用If Then语句不起作用的数据排序
出于某种原因,它将所有数据复制到所有三个粘贴位置。看到图像以供参考:
右边的细胞色是我的第一套标准。第二组直接在下面。左边的彩色单元格就是我的数据。
我能想到的唯一的事情就是我引用单元格位置错误。我目前正在使用(行,列)坐标系。例如:.Cells("B2")
与.Cells(2, 2)
相同。
以下是在问题
'
Dim j As Long
For j = 1 To ActiveWorkbook.Connections.Count
ActiveWorkbook.Connections(j).OLEDBConnection.BackgroundQuery = False
Next
ActiveWorkbook.RefreshAll
Worksheets("Query").Activate
ActiveSheet.ListObjects("Table_WinSPCData.accdb").Range.AutoFilter Field:=14 _
, Criteria1:="=81024 OK", Operator:=xlOr, Criteria2:="=81111 OK"
ActiveSheet.ListObjects("Table_WinSPCData.accdb").Range.AutoFilter Field:=1, _
Criteria1:=Array("DD_IMPELLER_SEAL_RING_004", "DD_IMPELLER_SEAL_RING_005", _
"DD_IMPELLER_SEAL_RING_007", "DD_IMPELLER_SEAL_RING_008", _
"GD_1ST_STAGE_IMPELLER_SEAL_RING", "GD_2ND_STAGE_IMPELLER_SEAL_RING", _
"IMPELLER_SEAL_RING", "INTERSTAGE_SEAL_RING", "MOTOR_SEAL_RING", _
"MOTOR_SEAL_RING_WITH_PILOT", "MOTOR_SEAL_RING_WITH_PILOT_005"), Operator:= _
xlFilterValues
Range("A:A,E:E,H:H,I:I").Select
Range("Table_WinSPCData.accdb[[#Headers],[VALUE_]]").Activate
Range("A:A,E:E,H:H,I:I,N:N").Select
Range("Table_WinSPCData.accdb[[#Headers],[TAG_VALUE]]").Activate
Selection.Copy
Sheets("1").Range("A1").PasteSpecial xlPasteValues
Application.CutCopyMode = False
Dim i As Long
Dim AssetRight1 As Range
Dim AssetRight2 As Range
Dim AssetRight3 As Range
Dim AssetLeft1 As Range
Dim PartnameRight1 As Range
Dim PartnameRight2 As Range
Dim PartnameRight3 As Range
Dim PartnameLeft1 As Range
Dim VariablenameRight1 As Range
Dim VariablenameRight2 As Range
Dim VariablenameRight3 As Range
Dim VariablenameLeft1 As Range
Dim Criteria1paste As Range
Dim Criteria2paste As Range
Dim Criteria3paste As Range
Set AssetRight1 = Cells(2, 20)
Set AssetRight2 = Cells(3, 20)
Set AssetRight3 = Cells(4, 20)
Set AssetLeft1 = Cells(2 + i, 5)
Set PartnameRight1 = Cells(2, 21)
Set PartnameRight2 = Cells(3, 21)
Set PartnameRight3 = Cells(4, 21)
Set PartnameLeft1 = Cells(2 + i, 1)
Set VariablenameRight1 = Cells(2, 22)
Set VariablenameRight2 = Cells(3, 22)
Set VariablenameRight3 = Cells(4, 22)
Set VariablenameLeft1 = Cells(2 + i, 2)
Set Criteria1paste = Cells(2 + i, 8)
Set Criteria2paste = Cells(2 + i, 9)
Set Criteria3paste = Cells(2 + i, 10)
For i = 0 To 20
If AssetRight1 = AssetLeft1 Then If VariablenameRight1 = VariablenameLeft1 Then If PartnameRight1 = PartnameLeft1 Then If Cells(2 + i, 7) >= Worksheets("Date").Range("D3") And Cells(2 + i, 3) <= Worksheets("Date").Range("D4") Then Rows(2 + i).Cells.Find("XXX").Offset(0, -2).Copy
Criteria1paste.PasteSpecial xlPasteValues
Application.CutCopyMode = False
If AssetRight2 = AssetLeft1 Then If VariablenameRight2 = VariablenameLeft1 Then If PartnameRight2 = PartnameLeft1 Then If Cells(2 + i, 7) >= Worksheets("Date").Range("D3") And Cells(2 + i, 3) <= Worksheets("Date").Range("D4") Then Rows(2 + i).Cells.Find("XXX").Offset(0, -2).Copy
Criteria2paste.PasteSpecial xlPasteValues
Application.CutCopyMode = False
If AssetRight3 = AssetLeft1 Then If VariablenameRight3 = VariablenameLeft1 Then If PartnameRight3 = PartnameLeft1 Then If Cells(2 + i, 7) >= Worksheets("Date").Range("D3") And Cells(2 + i, 3) <= Worksheets("Date").Range("D4") Then Rows(2 + i).Cells.Find("XXX").Offset(0, -2).Copy
Criteria3paste.PasteSpecial xlPasteValues
Application.CutCopyMode = False
Next i
End Sub
对不起它是这样一个乱七八糟的代码。我记录了它的大部分,所以它都在这个地方。提前致谢。
更新 好的,这里是For Next
Code As现在。由于某种原因,它存在For Next
循环的问题。它说有一个Next without a For
。
For i = 0 To 20
If AssetRight1 = AssetLeft1 And _
VariablenameRight1 = VariablenameLeft1 And _
PartnameRight1 = PartnameLeft1 And _
Cells(2 + i, 7) >= Worksheets("Date").Range("D3") And Cells(2 + i, 7) <= Worksheets("Date").Range("D4") Then
Rows(2 + i).Cells.Find("XXX").Offset(0, -2).Copy Criteria1paste
If AssetRight2 = AssetLeft1 And _
VariablenameRight2 = VariablenameLeft1 And _
PartnameRight2 = PartnameLeft1 And _
Cells(2 + i, 7) >= Worksheets("Date").Range("D3") And Cells(2 + i, 7) <= Worksheets("Date").Range("D4") Then
Rows(2 + i).Cells.Find("XXX").Offset(0, -2).Copy Criteria2paste
If AssetRight3 = AssetLeft1 And _
VariablenameRight3 = VariablenameLeft1 And _
PartnameRight3 = PartnameLeft1 And _
Cells(2 + i, 7) >= Worksheets("Date").Range("D3") And Cells(2 + i, 7) <= Worksheets("Date").Range("D4") Then
Rows(2 + i).Cells.Find("XXX").Offset(0, -2).Copy Criteria3paste
Next i
我会被清理选择开始:http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros – puzzlepiece87
@ puzzlepiece87我可以删除'ActiveWindow.ScollColumn'行。他们是否使用过,或者他们只是从我录制的内容中删除?有没有我可以删除的行,因为他们做的东西与代码无关。 – Keizzerweiss
是的,你可以删除'ActiveWindow.ScrollColumn'行。在所有的'.Select'和'Selection'都被修正之前,对其余的部分都没有评论,因为在大问题解决之前,这并不值得挑剔。 – puzzlepiece87