Excel FileSystemObject-无法打开保存到文件夹中的文件

Excel FileSystemObject-无法打开保存到文件夹中的文件,excel,vba,Excel,Vba,以下代码用于打开文件,将所需数据粘贴到这些文件中,并在完成工作后关闭这些文件。当我运行这段代码时,没有任何文件处于打开和关闭状态 运行时错误-13:类型不匹配 正在抛出这行代码 Set fldr = fso.GetFolder(Application.FileDialog(msoFileDialogFolderPicker).SelectedItems(1)) 请建议错误在哪里。尽管它在其他文件中运行良好: Sub split() Application.ScreenUpdating

以下代码用于打开文件,将所需数据粘贴到这些文件中,并在完成工作后关闭这些文件。当我运行这段代码时,没有任何文件处于打开和关闭状态

运行时错误-13:类型不匹配

正在抛出这行代码

Set fldr = fso.GetFolder(Application.FileDialog(msoFileDialogFolderPicker).SelectedItems(1))
请建议错误在哪里。尽管它在其他文件中运行良好:

Sub split()

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    Dim fso As New FileSystemObject
    Dim fl As File
    Dim fldr As Folder
    Dim akb As Workbook
    Dim tkb As Workbook
    Dim RawAL As Worksheet
    Dim RawAL1 As Worksheet
    Dim RawSR As Worksheet
    Dim RawSR1 As Worksheet
    Dim lrow As Integer
    Dim ALSummary As Worksheet
    Dim ALSummary1 As Worksheet

    MsgBox "Please select the path where Access Log Report are being saved."
    Application.FileDialog(msoFileDialogFolderPicker).Show

    Set fldr=fso.GetFolder(Application.FileDialog(msoFileDialogFolderPicker).SelectedItems(1))
    lrow = Cells(Rows.Count, 2).End(xlUp).Row

    For Each fl In fldr.Files
        Workbooks.Open fl

        Set akb = ActiveWorkbook
        Set tkb = ThisWorkbook
        Dim i As Integer

        Set RawAL = akb.Sheets("Raw Access Log")
        Set RawAL1 = tkb.Sheets("Raw Access Log")
        Set RawSR = akb.Sheets("Raw Submittal Report")
        Set RawSR1 = tkb.Sheets("Raw Submittal Report")
        Set ALSummary = akb.Sheets("Access Log Summary")
        Set ALSummary1 = tkb.Sheets("Access Log Summary")

        RawAL.Visible = xlSheetVisible
        RawAL.AutoFilterMode = False
        RawAL.Range("a1").CurrentRegion.ClearContents
        RawAL1.Activate
        RawAL1.AutoFilterMode = False
        RawAL1.Range("a1").CurrentRegion.AutoFilter Field:=1, _
                Criteria1:=ALSummary1.Range("b5"), Operator:=xlFilterValues
        RawAL1.Range("A1:f65000").SpecialCells(xlCellTypeVisible).Copy
        RawAL.Range("a1").PasteSpecial xlPasteValues

        RawSR.Visible = xlSheetVisible
        RawSR.AutoFilterMode = False
        RawSR.Range("a1").CurrentRegion.ClearContents
        RawSR1.Activate
        RawSR1.AutoFilterMode = False
        RawSR1.Range("a1").CurrentRegion.AutoFilter Field:=1, _
                Criteria1:=ALSummary1.Range("b5"), Operator:=xlFilterValues
        RawSR1.Range("A1:E500").SpecialCells(xlCellTypeVisible).Copy
        RawSR.Range("a1").PasteSpecial xlPasteValues
        Application.CutCopyMode = False

        RawSR.Visible = xlSheetHidden
        ALSummary.Activate
        akb.Close True

    Next fl
End Sub

在使用
.show
之后,您应该使用
.GetFolder()
方法,从
.show
中获取值,以确保确实选择了文件夹(将返回
-1
),并使用
中的字符串继续。selectitems()
传递文件夹路径

像这样的方法应该会奏效:

with application.filedialog(msoFileDialogFolderPicker)
    if .show = -1 then 
        set fldr = fso.getfolder(.selecteditems(1))
    else
        msgbox "No Folder selected"
    end if
end with

如果不深入研究这个问题,我会使用
Set akb=Workbooks.Open(fl)
而不是打开工作簿,然后使用
Set akb=ActiveWorkbook
手动打开问题文件夹中的文件吗?当代码正常工作时,你应该发布它。有一些事情可以清理,但与文件夹问题无关。@K.Dᴀᴠɪs实际上“错误13”只是抛出了这行代码:“Set fldr=fso.GetFolder(Application.FileDialog(msoFileDialogFolderPicker)。SelectedItems(1))”。Rest代码对我来说似乎很好。这是真正应该成为实际问题的一部分的信息。在@k.Davis中,我尝试使用您建议的上述代码,但仍然出现错误-“运行时错误'13':类型不匹配”@k.Davis我看不出两者之间有任何区别…请建议。我在变量名
fldr
上有一个拼写错误,如果您检查了。但是你能更具体地说是哪一行抛出错误吗?设置fldr=fso.getfolder(.selecteditems(1))这就是这一行…这个错误出现的地方。这个代码对我来说很好用。我可以看到,您是从这个网页而不是从您的代码中复制了这行代码,因为Excel会自动为您将某些方法大写。你能直接从你的VBE复制这行吗?这样我可以确保你没有打字错误?