[英]vba Autofilter and copy results to another sheet: i can't copy the right range
我有一個代碼可以過濾表ANAF CONTURI中的信息( 在G3列上的條件,向下到G10000 ),然后將結果(從A3:F3向下)復制到表ANAF BANCI中,從C2:H2開始並向下。
問題:如果我沒有在A3的 ANAF CONTURI工作表中輸入任何信息,它將不會復制該行中的任何內容(即使條件匹配,並且該行中直到F3的其余單元格都有數據)。
如果它在單元格B3上執行此操作就可以了,因為如果我在單元格B3上沒有數據,則該行的其余部分無關緊要,但只考慮了單元格A3。
解決辦法是什么 ?
Private Sub CommandButton1_Click()
' TRIAZA INFORMATIA INTRODUSA SI O INAINTEAZA SPRE PRELUCRARE IN ANAF BANCI
Application.ScreenUpdating = False
Sheet8.Unprotect Password:="online07"
Sheets("ANAF BANCI").Range("C2:H1000").ClearContents
With Sheets("ANAF CONTURI") '<--| reference your sheet
With .Range("G2", .Cells(.Rows.Count, 1).End(xlUp)) '<--| reference its column "A:G" range from row 1 down to column "A" last not empty row
.AutoFilter Field:=7, Criteria1:="Da" ''<--| filter referenced range on its 7th column (i.e. column "G") with "Da" values
If Application.WorksheetFunction.Subtotal(103, .Resize(, 1)) > 1 Then .Resize(.Rows.Count - 1, 6).Offset(1).SpecialCells(xlCellTypeVisible).Copy Destination:=Worksheets("ANAF BANCI").Range("C2")
End With
If (Sheets("ANAF CONTURI").AutoFilterMode And Sheets("ANAF CONTURI").FilterMode) Or Sheets("ANAF CONTURI").FilterMode Then
Sheets("ANAF CONTURI").ShowAllData
End If
End With
Sheet8.Range("A3:F20000").Locked = False
Sheet8.Protect Password:="online07"
' SortareAlaZ Macro
ActiveWorkbook.Worksheets("- - REZULTAT ANAF - -").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("- - REZULTAT ANAF - -").AutoFilter.Sort.SortFields. _
Add Key:=Range("O3:O16571"), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("- - REZULTAT ANAF - -").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Application.ScreenUpdating = True
End Sub
我發現了另一種可行且可以完成相同任務的方式:
Dim src As Worksheet
Dim tgt As Worksheet
Dim filterRange As range
Dim copyRange As range
Dim lastRow As Long
Set src = ThisWorkbook.Sheets("ANAF CONTURI")
Set tgt = ThisWorkbook.Sheets("ANAF BANCI")
' turn off any autofilters that are already set
src.AutoFilterMode = False
' find the last row with data in column A
lastRow = src.range("B" & src.Rows.Count).End(xlUp).Row
' the range that we are auto-filtering (all columns)
Set filterRange = src.range("A2:G" & lastRow)
' the range we want to copy (only columns we want to copy)
' in this case we are copying country from column A
' we set the range to start in row 2 to prevent copying the header
Set copyRange = src.range("A3:F" & lastRow)
' filter range based on column B
filterRange.AutoFilter Field:=7, Criteria1:="Da"
' copy the visible cells to our target range
' note that you can easily find the last populated row on this sheet
' if you don't want to over-write your previous results
copyRange.SpecialCells(xlCellTypeVisible).Copy tgt.range("C2")
If (Sheets("ANAF CONTURI").AutoFilterMode And Sheets("ANAF CONTURI").FilterMode) Or Sheets("ANAF CONTURI").FilterMode Then
Sheets("ANAF CONTURI").ShowAllData
End If
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.