Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel vba自动筛选并将结果复制到另一个工作表:我可以';不要复制正确的范围_Excel_Vba - Fatal编程技术网

Excel vba自动筛选并将结果复制到另一个工作表:我可以';不要复制正确的范围

Excel vba自动筛选并将结果复制到另一个工作表:我可以';不要复制正确的范围,excel,vba,Excel,Vba,我有一个代码,用于过滤工作表ANAF CONTURI中的信息(第G3列上的标准,向下至G10000),并将结果(从A3:F3开始向下)复制到工作表ANAF BANCI中,从C2:H2开始向下 问题是:如果我没有在A3中的工作表ANAF CONTURI中输入任何信息,它将不会从该行复制任何内容(即使条件是匹配的,并且该行的其余单元格直到F3都有数据) 如果它在单元格B3上这样做就可以了,因为如果我没有关于单元格B3的数据,行的其余部分是不相关的,但它只考虑单元格A3 解决办法是什么 Private

我有一个代码,用于过滤工作表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
Private子命令按钮1\u单击()
“在ANAF BANCI中,三合一信息介绍是一项初步研究
Application.ScreenUpdating=False
Sheet8.取消密码保护:=“online07”
纸张(“ANAF BANCI”)。范围(“C2:H1000”)。清晰目录

对于工作表(“ANAF CONTURI”)”我找到了另一种工作方式,并且做了同样的事情:

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

你写了“如果我没有在A3的工作表ANAF CONTURI中输入任何信息”:你的意思是A列是空的吗?是的。我最后用了另一种方法来做同样的事情,因为我找不到解决办法:)哪个列实际上总是设置数据“长度”?我是vba的新手(一周前),但我认为这是缺少的,可能默认情况下以A列为参考?大学教师;不知道..在OP的代码
范围(“G2”中,.Cells(.Rows.Count,1).End(xlUp))
语句将列“A”(即,列索引
1
)作为参考,以获取最后一个未使用的单元格。如果您知道“数据库”长度总是由“B”列数据决定的,那么只需将该语句更改为
.Range(“G2”、.Cells(.Rows.Count,2).End(xlUp))