文件类型更改时Excel VBA Dir()错误

文件类型更改时Excel VBA Dir()错误,excel,vba,Excel,Vba,我试图更好地理解Dir函数。我有一个Dir循环来对目录中的所有.csv文件执行操作,但是当循环遇到另一种文件类型时,例如.txt,它将出错,而不是继续下一个.csv。项目 这是我代码的相关部分 strSourceExcelLocation = "\\rilinfs001\Interdepartmental\Billings & Deductions\Billing Coordinators\MCB Reports\East\Monthly Quality MCBs (CMQ &

我试图更好地理解
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
中使用通配符的方式是否遗漏了什么


谢谢

尝试硬编码路径并重试。可能错误在硬编码中非常小。例如,在下面的代码中,将
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
解决了我的问题

问题似乎是因为当我调用另一个过程时,我在该子过程中有另一个
Dir
,如果一个文件夹不存在,则创建一个新文件夹。所以基本上我在a
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

您收到的错误消息或错误号是什么?您应该重新应用相同的筛选器以仅获取csv文件,或者添加
If
语句以跳过找到的任何非csv文件。导致错误的文件名是什么?我从未见过
Dir
忽略过滤器。@示例文件名是“SECMQ0419045345D.CSV”。一个不起作用的示例是“SECMQ0419045345D.TXT”。每个CSV文件都有一个对应的TXT文件。@Mistella我得到运行时错误5。
strWorkbook=Dir
行上的过程调用或参数无效。感谢您的回复。当我将确切的文件夹硬编码到其中时,您的代码确实有效,但我不会继续这样做。为了提供更多信息,我编辑了我的帖子,其中包含了字符串
strSourceExcelLocation
是什么。该字符串包括另一个字符串
fldr
,它是通过用户输入确定的,因为它总是会更改,而且我们并不总是事先知道它的名称。如果它与该字符串无关,那么可能与我让它在
Dir
循环(编辑csv然后另存为PDF)期间执行的操作有关吗?@TBoulz-调试过程的第一部分是制作一些小东西。现在尝试在代码中添加
fldr
部分,并确保其正常工作。仍然不要添加pdf部分。是的,我在同一个子模块中添加了
fldr
,它仍然有效。路径已打印到即时窗口。@TBoulz-就是这样。因此,如果只有
CSV
路径被打印到即时窗口,那么,您可以集中精力处理与
Export\u Excel\u as\u PDF
函数相关的3行。我在循环中的第一个操作是打开
CSV
文件,它不适用于一个字符串,因为它从目录返回文件名,但需要完整的文件路径。我以前使用
strSourceExcelLocation
strWorkbook
打开文件。在我们尝试过的testsub中,只剩下
workbookPath
,但我认为这还不足以打开文件?