【发布时间】:2021-08-23 18:25:35
【问题描述】:
我有一份包含 4 个工作表的报告:1 个首页和 3 个必须按名称过滤的工作表。过滤后,工作表必须保存为单独的文件。
我现在正在使用以下代码(见下文),但我有一些问题:
- 如何删除不符合条件的数据?因此,当在 Name1 上过滤数据时,应删除所有其他名称。
- 如何将首页 (sheet1) 与 3 个过滤后的工作表一起复制到 1 个文件中?它现在只复制 3 个过滤的工作表。无需过滤首页。
- 如何将数据粘贴为值(现在已粘贴为公式)?
Option Explicit
Sub AutoFilters()
Dim sheetsToFilter As Variant, sheetName As Variant
Dim sheetsColumnToFilterOn As Variant
Dim criteria As Variant, criterium As Variant
Dim iSht As Long
Dim pre As String
sheetsToFilter = Array("Sheet2", "Sheet3", "Sheet4")
sheetsColumnToFilterOn = Array(2, 3, 4)
criteria = Array("Name1", "Name2", "Name3")
pre = Format(Now, "dd-mm-yyyy")
Application.ScreenUpdating = False
For Each criterium In criteria
For iSht = LBound(sheetsToFilter) To UBound(sheetsToFilter)
Call Autofilter(ThisWorkbook.Worksheets(sheetsToFilter(iSht)).Range("A1"), CLng(sheetsColumnToFilterOn(iSht)), CStr(criterium))
Next iSht
Call CopySheet(sheetsToFilter, ThisWorkbook.Path & "\" & criterium & " " & pre & ".xlsx")
Next criterium
Application.ScreenUpdating = True
End Sub
Sub Autofilter(rng As Range, col As Long, criteria As String)
With rng
.Autofilter
.Autofilter field:=col, Criteria1:=criteria & "*", VisibleDropDown:=True
End With
End Sub
Sub CopySheet(sheetsToFilter As Variant, shtName As String)
ThisWorkbook.Worksheets(sheetsToFilter).Copy
ActiveWorkbook.SaveAs Filename:=shtName, FileFormat:=xlWorkbookDefault
ActiveWorkbook.Close False
End Sub
提前致谢!
【问题讨论】:
-
关于 q.3 从工作表中删除公式但在当前工作表上保留格式的简单方法是
ActiveSheet.UsedRange = ActiveSheet.UsedRange.Value -
我会使用单独的“控制”工作簿。编写一个打开主工作表的宏,使用 xlWorkbookDefault 将其另存为新文件名,然后处理副本,根据您想要的任何过滤器删除行。然后重复其他工作簿。这可能比复制单个工作表或数据更容易。确实有点依赖于文件大小。