Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用工作簿的Excel VBA。使用目录的结果打开_Vba_Excel - Fatal编程技术网

使用工作簿的Excel VBA。使用目录的结果打开

使用工作簿的Excel VBA。使用目录的结果打开,vba,excel,Vba,Excel,这看起来很简单,我已经让它工作了很多次,但是在我的Dir调用(遍历一个目录)和打开当前文件之间,有些东西一直在中断。以下是相关代码: SourceLoc = "C:\ExcelWIP\TestSource\" SourceCurrentFile = Dir(SourceLoc) 'Start looping through directory While (SourceCurrentFile <> "") Application.Workbooks.Open (SourceCurr

这看起来很简单,我已经让它工作了很多次,但是在我的Dir调用(遍历一个目录)和打开当前文件之间,有些东西一直在中断。以下是相关代码:

SourceLoc = "C:\ExcelWIP\TestSource\"
SourceCurrentFile = Dir(SourceLoc)

'Start looping through directory
While (SourceCurrentFile <> "")
Application.Workbooks.Open (SourceCurrentFile)
SourceLoc=“C:\ExcelWIP\TestSource\”
SourceCurrentFile=Dir(SourceLoc)
'开始在目录中循环
而(SourceCurrentFile“”)
Application.Workbooks.Open(SourceCurrentFile)
当Application.Workbooks.Open试图打开“C:\ExcelWIP\TestSource\\FILENAME”(注意额外的斜杠)时,我得到的是一个文件访问错误

但是,当我从SourceLoc中去掉最后一个斜杠时,Dir(SourceLoc)的结果是“”(它不搜索目录)

令人沮丧的是,当我以其他方式编辑sub时,这段代码的功能来了又去。我已经让它按原样工作了,我已经从目录路径中删除了“/”使它工作了,现在,我只是不能让它们一起工作

我已经浏览了联机帮助和ms文章,但似乎没有任何东西能够说明为什么它会不断地上下移动(除了停止工作时没有被编辑),以及为什么目录路径的格式有时会使用最终的“/”,有时不使用


有什么想法吗

这将打开该目录中的所有.xlxs文件

    Sub OpenFiles()
    Dim SourceCurrentFile As String
    Dim FileExtension as String: FileExtension = "*.xlxs"
    SourceLoc = "C:\ExcelWIP\TestSource\"
    SourceCurrentFile = Dir(SourceLoc)
    SourceCurrentFile = Dir()
    'Start looping through directory
    Do While (SourceCurrentFile <> "")
    Application.Workbooks.Open (SourceLoc &"\"& SourceCurrentFile)
    SourceCurrentFile = Dir(FileExtension)
    Loop
    End Sub
子OpenFiles()
将SourceCurrentFile设置为字符串
Dim FileExtension作为字符串:FileExtension=“*.xlxs”
SourceLoc=“C:\ExcelWIP\TestSource\”
SourceCurrentFile=Dir(SourceLoc)
SourceCurrentFile=Dir()
'开始在目录中循环
执行时(SourceCurrentFile“”)
Application.Workbooks.Open(SourceLoc&“\”&SourceCurrentFile)
SourceCurrentFile=Dir(文件扩展名)
环
端接头
考虑使用VBA,其中包括文件夹和文件属性:

Sub xlFilesOpen()
    Dim strPath As String
    Dim objFSO As Object, objFolder As Object, xlFile As Object

    strPath = "C:\ExcelWIP\TestSource"

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFolder = objFSO.GetFolder(strPath)

    For Each xlFile In objFolder.Files
        If Right(xlFile, 4) = "xlsx" Or Right(xlFile, 3) = "xls" Then
            Application.Workbooks.Open (xlFile)
        End If
    Next xlFile

    Set objFSO = Nothing
    Set objFolder = Nothing
End Sub

JLILI Aman找到了答案,将Dir()的结果作为字符串。结合使用Application.Open上的路径,可以从代码中获得稳定的行为

新代码:

Dim SourceLoc as String
Dim SourceCurrentFile as String
SourceLoc = "C:\ExcelWIP\TestSource\"
SourceCurrentFile = Dir(SourceLoc)

'Start looping through directory
While (SourceCurrentFile <> "")
Application.Workbooks.Open (SourceLoc & "/" & SourceCurrentFile)
Dim SourceLoc作为字符串
将SourceCurrentFile设置为字符串
SourceLoc=“C:\ExcelWIP\TestSource\”
SourceCurrentFile=Dir(SourceLoc)
'开始在目录中循环
而(SourceCurrentFile“”)
Application.Workbooks.Open(SourceLoc&“/”&SourceCurrentFile)
我没有包括推荐的文件扩展名,因为我在一个目录中处理xls、xlsx和xlsm文件。这段代码将打开所有这些文件

警告-此代码将为目录中的每个文件(包括非excel文件)设置当前文件。就我而言,我只处理excel文件,所以这不是问题


至于发生这种情况的原因,Application.Open似乎不会接受Dir()的完整对象结果,因此Dir()的返回需要是一个字符串。除此之外,我没有深入探究它的原因

该目录中的所有文件都是excel?不确定为什么
Dir
返回它是什么。。。但是,为什么不在代码行中抛出一个
Replace(Dir(),“\\”,“\”
?所有的东西都是excel文件。我现在正在处理测试数据。我可以投一个替代品,但我担心当它再次表现出不稳定时,我将不得不移除它。我关心的是,Dir()返回的内容正在发生变化,我需要弄清楚为什么会发生这种情况,以便找到一个永久的解决方案,而不是每次都继续解决这个问题。Dir()返回一个已经有完整路径的file对象。如果我告诉Application.Workbooks.Open打开(FileLocation和File Object),它在尝试打开的路径中将有2个文件位置。据我所知,我不能将Dir()结果用作名称,只能用作文件对象。我能做的是调暗FileName并设置FileName=SourceCurrentFile.Name,但这并不能使我的尝试更加防弹。你不想从目录打开excel文件吗?我需要道歉。我没有注意到在您的示例中,SourceCurrentFile是一个字符串,这会产生很大的不同。谢谢