簡體   English   中英

vba自動篩選並將結果復制到另一張紙:我無法復制正確的范圍

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM