FileSystemObject - не удается открыть файлы, сохраненные в папке - PullRequest
0 голосов
/ 07 декабря 2018

Ниже приведен код, который предназначен для открытия файлов и вставки необходимых данных в эти файлы и закрытия этих файлов после завершения его работы.Во время выполнения этого кода ни один из файлов при открытии и

Ошибка времени выполнения-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

1 Ответ

0 голосов
/ 07 декабря 2018

Вы должны использовать метод .GetFolder() после использования .show, взяв значение из .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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...