Vba 跨工作簿中的多个工作表应用宏筛选,并将筛选后的值保存为包含这些多个工作表的另一个工作簿

Vba 跨工作簿中的多个工作表应用宏筛选,并将筛选后的值保存为包含这些多个工作表的另一个工作簿,vba,excel,Vba,Excel,我有一本包含23张工作表的工作簿。我必须应用宏自动筛选来筛选23个工作表中所需的数据,并将这些数据保存为工作手册,其中包含23个工作表中的筛选数据 Sub Switch_Filter() Dim j As Integer, k As Integer, k1 As Integer Dim LastRow As Integer, i As Integer, erow As Integer Dim s As Variant, s1 As Variant

我有一本包含23张工作表的工作簿。我必须应用宏自动筛选来筛选23个工作表中所需的数据,并将这些数据保存为工作手册,其中包含23个工作表中的筛选数据

     Sub Switch_Filter()
     Dim j As Integer, k As Integer, k1 As Integer
     Dim LastRow As Integer, i As Integer, erow As Integer
     Dim s As Variant, s1 As Variant


     j = Worksheets.Count


     s = InputBox("Enter Switch id")
     s1 = s & "*"
     If s <> vbNullString Then

     For k = 1 To 20
     If (k <> 1) And (k <> 4) And (k <> 7) Then
     With Worksheets(k)
     .UsedRange.AutoFilter field:=3, Criteria1:=s1


     LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row

     For i = 3 To LastRow


     Range(Cells(i, 1), Cells(i, 36)).Select
     Selection.Copy
     Workbooks.Open Filename:="C:\Users\takyar\Documents\salesmaster-new.xlsx"
     Worksheets(k).Select
     erow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row

     ActiveSheet.Cells(erow, 1).Select
     ActiveSheet.Paste
     ActiveWorkbook.Save
     ActiveWorkbook.Close
     Application.CutCopyMode = False


     Next i

     End With

     End If
     Next k
     End If
     End Sub
子开关_过滤器()
尺寸j为整数,k为整数,k1为整数
Dim LastRow为整数,i为整数,erow为整数
尺寸s为变型,s1为变型
j=工作表。计数
s=输入框(“输入开关id”)
s1=s&“*”
如果是vbNullString,则
对于k=1到20
如果(k1)和(k4)和(k7),那么
带工作表(k)
.UsedRange.AutoFilter字段:=3,准则1:=s1
LastRow=.Cells(.Rows.Count,“A”).End(xlUp).Row
对于i=3到最后一行
范围(单元格(i,1),单元格(i,36))。选择
选择,复制
工作簿。打开文件名:=“C:\Users\takyar\Documents\salesmaster new.xlsx”
工作表(k)。选择
erow=ActiveSheet.Cells(Rows.Count,1).End(xlUp).Offset(1,0).Row
单元格(erow,1)。选择
活动表。粘贴
活动工作簿。保存
活动工作簿。关闭
Application.CutCopyMode=False
接下来我
以
如果结束
下一个k
如果结束
端接头
几乎完成,但它将过滤后的数据保存在新工作簿的同一页中,我在此附上代码:-

     Sub Switch_Filter()
     Dim j As Integer, k As Integer
     Dim LastRow As Integer, i As Integer
     Dim s As Variant, s1 As Variant
     Dim MyWorkbook As Workbook, newWork As Workbook
     Set MyWorkbook = ThisWorkbook

     j = Worksheets.Count

     s = InputBox("Enter Switch id")
     s1 = s & "*"
     If s <> vbNullString Then

     For k = 1 To 20

     With Worksheets(k)
     Set MyWorkbook = ThisWorkbook
     If (k <> 1) And (k <> 4) And (k <> 7) Then

    .AutoFilterMode = False
        With Worksheets(k).UsedRange
            .AutoFilter
            .AutoFilter Field:=3, Criteria1:=s1
         End With
    End If

    MyWorkbook.Sheets(k).Rows("1:65000").Copy

    Set newWork = Workbooks.Open("E:\spreed sheet\sample1.xlsx")
    With newWork.Worksheets(k)
        Range("A2").PasteSpecial Paste:=xlPasteAll

        newWork.Close

    End With

    End With
    Next k
    End If
    End Sub
子开关_过滤器()
尺寸j为整数,k为整数
Dim LastRow为整数,i为整数
尺寸s为变型,s1为变型
将MyWorkbook设置为工作簿,将newWork设置为工作簿
设置MyWorkbook=ThisWorkbook
j=工作表。计数
s=输入框(“输入开关id”)
s1=s&“*”
如果是vbNullString,则
对于k=1到20
带工作表(k)
设置MyWorkbook=ThisWorkbook
如果(k1)和(k4)和(k7),那么
.AutoFilterMode=False
带工作表(k)。使用表格
.自动过滤器
.自动筛选字段:=3,标准1:=s1
以
如果结束
MyWorkbook.Sheets(k).行(“1:65000”).复制
设置newWork=Workbooks.Open(“E:\spreed sheet\sample1.xlsx”)
使用newWork.Worksheets(k)
范围(“A2”)。粘贴特殊粘贴:=xlPasteAll
新工作,结束
以
以
下一个k
如果结束
端接头
请给我一个解决方案


提前谢谢

甚至不确定这是否正在执行,您没有真正说明错误发生的位置

如果没有这些信息,我认为最大的问题是您一次复制一行,并且每次要复制该行时都要打开和关闭工作簿

如果您希望新工作簿只包含已筛选数据的所有单独的页,那么您可能需要考虑在旧文档中创建新的工作表,只需将已筛选的数据和剪切/移动到一个新的文档一次整页。您可以通过录制宏并手动执行来学习代码

否则,如果您可以将这些数据全部存储在一个工作表/表格中,我建议将每个工作表及其过滤数据加载到一个数组中,然后打开新工作簿并写入该数组中的所有信息。这个选项很可能是最快的。

最终得到了答案

      Sub Switch_Filter()
 Dim j As Integer, k As Integer
 Dim LastRow As Integer, i As Integer
 Dim s As Variant, s1 As Variant
 Dim MyWorkbook As Workbook, newWork As Workbook
 Dim ws As Worksheet, ws1 As Worksheet

 Dim name As String



 Set MyWorkbook = ThisWorkbook

 j = Worksheets.Count

 s = InputBox("Enter Switch id")
 s1 = s & "*"
 If s <> vbNullString Then

 For k = 1 To j

 With Worksheets(k)

 Set MyWorkbook = ThisWorkbook
 '.UsedRange.AutoFilter Field:=3, Criteria1:=s1
    If (k <> 1) And (k <> 4) And (k <> 7) And (k < 20) Then

    .AutoFilterMode = False
        With Worksheets(k).UsedRange
            .AutoFilter
            .AutoFilter Field:=3, Criteria1:=s1
         End With
    End If
 'LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row

    MyWorkbook.Sheets(k).Rows("1:65000").Copy

    Set newWork = Workbooks.Open("E:\spreed sheet\sample1.xlsx")


    Set ws = Sheets.Add
    name = ws.name

    With newWork.Sheets(name)

        Range("A2").PasteSpecial Paste:=xlPasteAll

        newWork.Close

    End With

 End With
 Next k
 End If
 End Sub
子开关_过滤器()
尺寸j为整数,k为整数
Dim LastRow为整数,i为整数
尺寸s为变型,s1为变型
将MyWorkbook设置为工作簿,将newWork设置为工作簿
将ws设置为工作表,将ws1设置为工作表
将名称设置为字符串
设置MyWorkbook=ThisWorkbook
j=工作表。计数
s=输入框(“输入开关id”)
s1=s&“*”
如果是vbNullString,则
对于k=1到j
带工作表(k)
设置MyWorkbook=ThisWorkbook
'.UsedRange.AutoFilter字段:=3,准则1:=s1
如果(k1)和(k4)和(k7)和(k<20),那么
.AutoFilterMode=False
带工作表(k)。使用表格
.自动过滤器
.自动筛选字段:=3,标准1:=s1
以
如果结束
'LastRow=.Cells(.Rows.Count,“A”).End(xlUp).Row
MyWorkbook.Sheets(k).行(“1:65000”).复制
设置newWork=Workbooks.Open(“E:\spreed sheet\sample1.xlsx”)
设置ws=Sheets.Add
name=ws.name
使用newWork.Sheets(名称)
范围(“A2”)。粘贴特殊粘贴:=xlPasteAll
新工作,结束
以
以
下一个k
如果结束
端接头

我必须应用宏…
那么是什么阻止了你呢?Siddharth Rout先生,我不知道宏的确切编码方法你知道如何用VBA编码吗?是的,有一点,有可能实现上述概念吗???是的,但我怀疑是否有人会把代码放在盘子里给你(除非有人想快速指出)。您必须编写自己的代码,然后在此处发布代码,说明您的具体位置。LastRow=.Cells(.Rows.Count,“A”)。End(xlUp).行错误此行Archiassir先生,是否可以从工作表的第5行应用自动筛选,因为表格标题从第5行开始1ly