excel 使用当前区域的高级过滤器将过滤数据复制到新工作表

z9zf31ra  于 2023-06-30  发布在  其他
关注(0)|答案(1)|浏览(160)

我有一个代码,在另一个文件中工作正常,但在一个类似的文件中,它将不再工作,我不知道错误可能是什么。

Sub Voorstel()
' voorstel om door te sturen naar de klant

Application.DisplayAlerts = False
Application.ScreenUpdating = False

Dim lastRow As Integer
Dim r As Range, c As Range, sh As Worksheet

Set sh = ThisWorkbook.Sheets("Voorstel")
Set r = Workbooks.Add.Sheets(1).Range("A1").Resize(2, 6)
Set c = r.Offset(, 7).Resize(2, 1)
 
r.Resize(1) = Array(sh.[A11], sh.[B11], sh.[D11], sh.[F11], sh.[H11], sh.[J11])
c.Value = Application.Transpose(Array("TOT", "<>0"))
sh.Range("A11").CurrentRegion.AdvancedFilter 2, c, r
c.ClearContents

Application.DisplayAlerts = True

 
ActiveWorkbook.SaveAs Filename:="V:\Supply Chain Team\07. Analysebestanden Klanten\16. Behoeftebepaling\Proposal\Proposal" & _
        Format(Date, " dd-mm-yyyy") & ".xlsx", FileFormat:=51
        
End Sub

我得到一个运行时错误1004 -提取区域缺少字段名或字段名无效。错误在这一行:sh.Range(“A11”).CurrentRegion.AdvancedFilter 2,c,r
我不得不承认我没有写这个代码自己,我(认为)理解它的大部分,但我不知道如何阅读代码的错误发生,什么是2在高级文件?
有人能帮我把这段代码写出来吗?
它需要过滤下表

我只想查看日期下面有数量的行。
非常感谢!

8ehkhllq

8ehkhllq1#

首先,我将介绍更多描述性的变量名:

' Assumption: No other Workbook was open before adding one
Dim shtSource As Worksheet: Set shtSource = ThisWorkbook.Sheets("Voorstel")
Dim listRange As Range: Set listRange = shtSource.Range("A11").CurrentRegion
Dim criteriaRange As Range: Set criteriaRange = Application.Workbooks(2).Sheets(1).Range("A1:F2")
Dim copyToRange As Range: Set copyToRange = Application.Workbooks(2).Sheets(1).Range("H1:H2")
listRange.AdvancedFilter xlFilterCopy, criteriaRange, copyToRange

导致错误的最后一行想要执行以下操作:使用高级过滤器根据criteriaRange中的条件过滤listRange的内容,并将结果复制到copyToRange
高级过滤器是Excel现在很少使用的功能,这里是它在功能区上的图标图片:

我用这段代码做了一些实验。
如果你想这样做,你需要Voorstel!A11周围的数据(CurrentRegion扩展A11以包括附近的非空单元格),它有一个从A11J11的标题行(至少A11,B11,D11,F11,H11,J11必须是非空的,因为这些将被复制到新工作簿),可能包含criteriaRange中引用的标题(只有一个:“TOT”,并且标准是它不应等于0)。
如果A11周围没有任何数据,则会得到“Run-time error '1004':此命令至少需要两行源数据...”。
如果A11周围有数据,但头的某些单元格(A11:J11,更确切地说是A11,B11,D11,F11,H11,J11)是空的,那么你会得到“运行时错误'1004':提取区域缺少字段名“”或字段名无效。
有趣的是,如果没有“TOT”字段,您将不会收到错误消息,但不会复制任何数据。(您可以有多个“TOT”字段。)
作为演示,在运行您发布的函数之前,在即时窗口中发出以下命令:

ThisWorkbook.Sheets("Voorstel").Range("A11:J11").Value = "TOT"
ThisWorkbook.Sheets("Voorstel").Range("A12:J12").Value = 1

预期的结果是新工作簿的第一个工作表的A1:F1范围将包含“TOT”,其A2:F2范围将包含1,并且不会出现错误消息。

相关问题