首先,我很抱歉,如果问题太新手,因为我仍然自学VBA。VBA编程:workbooks.open打开多个文件
问题:我在“最终文件夹”中有6个excel文件。我需要依次打开每个代码,从代码所在的工作簿中放入一些数据(我正在使用此工作簿作为源代码)。
错误:我试过了多个选项,但是最新的代码(下面)将所有6个文件打开在一起,而不是依次打开它们。
我的观察:似乎在脚本循环中运行workbooks.open时,默认情况下所有文件都会打开。
请帮忙。谢谢
Sub PopulateFinalFile()
Dim filpath As String
Dim fso As Scripting.FileSystemObject
Dim fil As Scripting.File
Dim fldr As Scripting.Folder
filpath = "C:\Users\deepak.ved\Desktop\Reports\Final Reports"
Set fso = New Scripting.FileSystemObject
Set fldr = fso.GetFolder(filpath)
For Each fil In fldr.Files
Application.Workbooks.Open (fso.GetFile(fil.Path))
Next fil
End Sub
无关的问题:如何指向使用FSO的工作簿。就像我使用getfile
或folder.files
一样,它会返回一个路径。当我将路径传递给工作簿时,我需要有workbook.open(path)
,但我只想指向该工作簿而不是打开它。
如果按顺序打开多个文件,则需要在workbook.open代码中使用MultiSelect:'Application.Workbooks.Open(fso.GetFile(fil.path),MultiSelect:= True)'。此外,当您使用MultiSelect时,文件的顺序不再保留,因此您需要提供循环。尝试这篇文章的帮助[链接](http://stackoverflow.com/questions/25180061/excel-vba-getopenfilename-error-on-multiselect-true) – user1
嘿吉日,谢谢你的快速回复。我会检查这个,并让你知道它是否工作:) –
创建一个工作簿变量,说'wb',然后在主循环中有'Set wb = Application.Workbooks.Open(fso.GetFile(fil.Path))' 。仍然在该循环的主体中,处理'wb',然后关闭它。这样,目录中的工作簿就会按顺序处理,这就是您想要的。这个问题可能有所帮助:http://stackoverflow.com/q/5851531/4996248 –