文件打开不一致

时间:2015-03-17 13:05:35

标签: excel vba

我正在使用代码打开以特定前缀开头的文件夹中的所有文件:

folder = "C:\Users\xxx\Documents\Exception Reports\"
pref = "blah blah prefix"
file = pref & "*.xls"
exPath = folder & file
filename = Dir(exPath)

Do While filename <> ""
    Workbooks.Open (filename)
    ...
    Workbooks(filename).Close SaveChanges:=False
    filename = Dir()
Loop

第一次打开宏后运行代码时,我收到“抱歉,我们找不到-filename-。是否有可能被移动,重命名或删除?”但是-filename-它打印的是我想要它打开的那个,我所指定的是我想要的前缀和文件扩展名,所以在我看来,如果它知道完整的文件名就会发现它很好。此外,如果我在声明文件名变量和启动Do While循环之间放入一个消息框,则消息框将打印出我希望它打开的正确文件名。

如果我将新文件保存到文件夹中并将其命名为“AA.xls”,然后让程序循环遍历文件夹(而不是指定前缀),然后返回并指定前缀,它工作正常,并继续工作,直到我关闭程序并重新打开,进程从头开始。但是,此过程仅在我将新文件保存到该文件夹​​时才有效。如果我尝试将“AA.xls”文件留在文件夹中,我会得到与其他文件一样的错误。

感谢您的任何意见!

1 个答案:

答案 0 :(得分:0)

尝试使用CMD方法并查看是否遇到同样的问题,如果这样做,则很可能是权限问题:

Sub SO()

Const folder    As String = "C:\Users\xxx\Documents\Exception Reports\"
Const pref      As String = "blah blah prefix"
Dim file        As String
Dim exPath      As String
Dim fileName    As Variant

file = pref & "*.xls": exPath = folder & file

For Each fileName In _
    Filter(Split(CreateObject("WScript.Shell").Exec("CMD /C DIR """ & exPath & """ /B /A:-D").StdOut.ReadAll, vbCrLf), ".")

    Workbooks.Open CStr(folder & fileName)
        '// Do code here
    Workbooks(fileName).Close False

Next fileName

End Sub