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