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