Excel VBA Dir () Ошибка при изменении типа файла - PullRequest
1 голос
/ 29 мая 2019

Я пытаюсь лучше понять функцию Dir. У меня есть цикл Dir для выполнения действий со всеми .csv файлами в каталоге, но когда цикл встречается с другим типом файла, таким как .txt, он будет выдавать ошибку вместо перехода к следующему .csv. вещь.

Это соответствующая часть моего кода.

strSourceExcelLocation = "\\rilinfs001\Interdepartmental\Billings & Deductions\Billing Coordinators\MCB Reports\East\Monthly Quality MCBs (CMQ & SECMQ)\2019\Individual_Reports\" & fldr & "\"

strWorkbook = Dir(strSourceExcelLocation & "*.csv*")

Do While Len(strWorkbook) > 0
    'Open the workbook
    Set wbktoExport = Workbooks.Open(Filename:=strSourceExcelLocation & strWorkbook)

    'Export all sheets as single PDF
    Call Export_Excel_as_PDF(wbktoExport)

    'Get next workbook
    strWorkbook = Dir

    'Close Excel workbook without making changes
    wbktoExport.Close False
Loop

Так что если в каталоге есть только .csv файлы, то это работает нормально. Когда встречается файл другого типа, возникает ошибка.

Ошибка в линии

strWorkbook = Dir

Ошибка времени выполнения 5: неверный вызов процедуры или аргумент

Я что-то упускаю из-за того, как я использую подстановочные знаки в .csv в начале?

Спасибо

Ответы [ 2 ]

2 голосов
/ 29 мая 2019

Решил мою проблему.

Проблема, похоже, заключалась в том, что когда я вызывал другую процедуру, у меня была другая Dir в этой подпрограмме для создания новой папки, если она еще не существовала. Так что в основном у меня было Dir в Dir, что, видимо, плохо.

Я переместил часть создания папки в самое начало моей процедуры, поэтому она выполняется до того, как я начну Dir для циклического прохождения всех файлов CSV.

Option Explicit

Sub Loop_Dir_for_Excel_Workbooks()
Dim strWorkbook As String, wbktoExport As Workbook, strSourceExcelLocation As String, fldr As String, strTargetPDFLocation As String, d As String

strTargetPDFLocation = "\\nhchefs001\Accounting\IMAGING\BILLINGS & DEDUCTIONS\EAST MCB FILES\"
'***** Creating a folder to save the PDFs in. Naming the folder with today's date *****
d = Format(Date, "mm-dd-yyyy")
strTargetPDFLocation = "\\nhchefs001\Accounting\IMAGING\BILLINGS & DEDUCTIONS\EAST MCB FILES\" & d & "\"
If Len(Dir(strTargetPDFLocation, vbDirectory)) = 0 Then MkDir strTargetPDFLocation

fldr = InputBox("Input the EXACT Folder Name that you want to create PDFs for")

strSourceExcelLocation = "\\rilinfs001\Interdepartmental\Billings & Deductions\Billing Coordinators\MCB Reports\East\Monthly Quality MCBs (CMQ & SECMQ)\2019\Individual_Reports\" & fldr & "\"

'Search all Excel files in the directory with .xls, .xlsx, xlsm extensions
strWorkbook = Dir(strSourceExcelLocation & "*.csv")

Do While Len(strWorkbook) > 0
    'Open the workbook
    Set wbktoExport = Workbooks.Open(Filename:=strSourceExcelLocation & strWorkbook)

    'Export all sheets as single PDF
    Call Export_Excel_as_PDF(wbktoExport, strTargetPDFLocation)

    'Close Excel workbook without making changes
    wbktoExport.Close False

    'Get next workbook
    strWorkbook = Dir

Loop

End Sub
0 голосов
/ 29 мая 2019

Попробуйте жестко закодировать путь и повторите попытку. Вероятно, в жестком кодировании ошибка очень мала. Например, в приведенном ниже коде замените C:\Users\username\Desktop\AAA\ на путь к файлу. Тогда запустите это. Не забывайте последние \. Должно работать:

Sub TestMe()

    Dim workbookPath As String
    workbookPath = Dir("C:\Users\username\Desktop\AAA\" & "*.csv")

    Do While Len(workbookPath) > 0
        Debug.Print workbookPath
        workbookPath = Dir
    Loop

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...