循环到不过滤多个excel工作簿VBA

时间:2017-06-07 08:19:36

标签: excel vba excel-vba

我正在尝试循环以对所有工作簿的A列进行过滤(因为它们是相同的,alwyas列A)。 我想显示所有细胞,因为过滤器是空的细胞。 我有很多文件夹(超过50个),所以循环对我的代码的下一步非常有用和重要。

我有一个适用于一个文件夹的代码:

`Sub unfilterr()
Dim y As Workbook, myfile, FolderPath, path
Dim ws As Excel.Worksheet
Set y = Workbooks.Open("Z:\VBA\Copie de Devis_65 Version 
avec G35.xlsx")
With y.Worksheets("Para RF")
    If Not y.Worksheets("Para RF").AutoFilter Is Nothing Then
            y.Sheets("Para RF").Range("A1").AutoFilter Field:=1
    End If
End With
End Sub`

现在尝试循环:

`Sub unfilter1()
Dim y As Workbook, myfile, FolderPath, path
Dim ws As Excel.Worksheet

'## Open workbooks first:
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual



FolderPath = "Z:\VBA\Test\"
path = FolderPath & "*.xls*"
myfile = Dir(FolderPath & "*.xls*")

Do While myfile <> ""

Set y = Workbooks.Open(path) 'I put path instead of myfile because I have error if I put myfile

Set ws = y.Worksheets("Para RF")
'With ws
    If Not ws.AutoFilter Is Nothing Then
            y.Sheets("Para RF").Range("A1").AutoFilter Field:=1
    End If
'End With

myfile = Dir()
y.Close saveChanges:=True
Loop


MsgBox ("Task Complete")
End Sub

你能告诉我这个循环有什么问题!? 我在测试文件夹中的4个工作簿上尝试它!只有第一个未经过滤,而其他则未过滤。看起来循环只在文件夹中的第一个工作簿上重复。

所以这个循环没有错误信息,但结果不满意。

非常感谢你的帮助。

喝彩!

1 个答案:

答案 0 :(得分:1)

Workbook.Open()方法需要一个完整的路径和文件名。

替换

 Set y = Workbooks.Open(path)

Set y = Workbooks.Open(FolderPath & myfile)

你应该好好去。 您不需要路径变量。

编辑:我将整个脚本最小化到最低限度,以遍历所有“ .xls ”文件并在文件夹中打开所有文件:

Sub OpenWorkbooks()
Dim y As Workbook
Dim myfile As String
Dim FolderPath As String

FolderPath = "C:\TestDirectory\"
myfile = Dir(FolderPath & "*.xls*")

Do While myfile <> ""
    Set y = Workbooks.Open(FolderPath & myfile) 
    myfile = Dir()
Loop
End Sub

以上打开我机器上C:\TestDirectory\的每个Excel文件。 注:确保FolderPath变量的末尾有“\”,否则它会查找不起作用的C:\TestDirectorySomeFileName.xlsx