使用VBA-FSO对象方法遍历文件夹及子文件夹的部分内容并复制到当前文件夹,问题有如下:①代码:Set w1 = Workbooks.Open(files.Path),遇到docx的内容时,报错显示格式无效,请问如何调整,只用遍历xlsx格式,不需要docx格式进行遍历;②遍历的文件老是要自动弹出,如何设置调整新增代码避免手工弹出。
写的代码如下:ub 所有文件夹()
Dim fs As New FileSystemObject, arr(), i, j, k, wb, g, test
Dim fd, subfd As Folder
Dim files As file
Set fp = Application.FileDialog(msoFileDialogFolderPicker) '选择需要查询文件的文件夹
fp.Show
Set paths = fp.SelectedItems
ReDim arr(1)
arr(0) = paths(1) '文件夹路径赋给数组
Application.ScreenUpdating = False
Do Until i > k
Set fd = fs.GetFolder(arr(i))
For Each files In fd.files
j = j + 1
'Range("a" & j + 1).Hyperlinks.Add Anchor:=Range("a" & j + 1), Address:=files.Path, TextToDisplay:=files.Name
Set w1 = Workbooks.Open(files.Path)
'Range("b" & j + 1) = files.DateLastModified
'Range("C" & j + 1) = files.Size \ 1024 & "KB"
g = w1.Sheets(1).Range("a1048576").End(xlUp).Row
w1.Sheets(1).Range("D1:D1" & g).Copy Destination:=ThisWorkbook.Sheets(1).Range("a1048576").End(xlUp).Offset(1, 0)
w1.Close
Next
For Each subfd In fd.SubFolders
k = k + 1
ReDim Preserve arr(k + 1)
arr(k) = subfd '将子文件夹赋给数组
Next
i = i + 1
Loop
MsgBox ("一共有" & j & "个文件," & k & "个文件夹")
Application.ScreenUpdating = True
End Sub
Sub 所有文件夹()
Dim fs As New FileSystemObject, arr(), i, j, k, wb, g, test
Dim fd, subfd As Folder
Dim files As file
Set fp = Application.FileDialog(msoFileDialogFolderPicker) '选择需要查询文件的文件夹
fp.Show
Set paths = fp.SelectedItems
ReDim arr(1)
arr(0) = paths(1) '文件夹路径赋给数组
Application.ScreenUpdating = False
Do Until i > k
Set fd = fs.GetFolder(arr(i))
For Each file In fd.files
If LCase(Right(file.Name, 5)) = ".xlsx" Then '限制为xlsx扩展名的文件
j = j + 1
Set w1 = Workbooks.Open(file.Path)
g = w1.Sheets(1).Range("a1048576").End(xlUp).Row
w1.Sheets(1).Range("D1:D1" & g).Copy Destination:=ThisWorkbook.Sheets(1).Range("a1048576").End(xlUp).Offset(1, 0)
w1.Close False '退出时不保存
End If
Next
For Each subfd In fd.SubFolders
k = k + 1
ReDim Preserve arr(k + 1)
arr(k) = subfd '将子文件夹赋给数组
Next
i = i + 1
Loop
MsgBox ("一共有" & j & "个文件," & k & "个文件夹")
Application.ScreenUpdating = True
End Sub
Sub loopT()
Dim MyFolder As String, MyFile As String
With Application.FileDialog(msoFileDialogFolderPicker)
.AllowMultiSelect = False
.Show
MyFolder = .SelectedItems(1)
Err.Clear
End With
Application.ScreenUpdating = False
MyFile = Dir(MyFolder & "\", vbReadOnly)
Do While MyFile <> ""
Workbooks.Open Filename:=MyFolder & "\" & MyFile, UpdateLinks:=False
Workbooks(MyFile).Close savechanges:=False
MyFile = Dir
Loop
Application.ScreenUpdating = True
End Sub
docx的问题解决了,谢谢,但是:g = w1.Sheets(1).Range("a1048576").End(xlUp).Row
w1.Sheets(1).Range("D1:D1" & g).Copy Destination:=ThisWorkbook.Sheets(1).Range("a1048576").End(xlUp).Offset(1, 0),这块代码生成的数据有问题,可以帮忙调整下吗,需求是所有底层表单的B3,B5,B6,E7等,单元格内容不含格式提取到当前工作表的第一列,第二列,第三列,第四列等。