我正在尝试循环以对所有工作簿的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个工作簿上尝试它!只有第一个未经过滤,而其他则未过滤。看起来循环只在文件夹中的第一个工作簿上重复。
所以这个循环没有错误信息,但结果不满意。
非常感谢你的帮助。
喝彩!
答案 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
。