VBA、FSO、不遍历docx问题的解决

问题遇到的现象和发生背景:

使用VBA-FSO对象方法遍历文件夹及子文件夹的部分内容并复制到当前文件夹,问题有如下:①代码:Set w1 = Workbooks.Open(files.Path),遇到docx的内容时,报错显示格式无效,请问如何调整,只用遍历xlsx格式,不需要docx格式进行遍历;②遍历的文件老是要自动弹出,如何设置调整新增代码避免手工弹出。

img

写的代码如下: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等,单元格内容不含格式提取到当前工作表的第一列,第二列,第三列,第四列等。