2016-11-14 572 views
1

首先,我很抱歉,如果问题太新手,因为我仍然自学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的工作簿。就像我使用getfilefolder.files一样,它会返回一个路径。当我将路径传递给工作簿时,我需要有workbook.open(path),但我只想指向该工作簿而不是打开它。

+1

如果按顺序打开多个文件,则需要在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

+0

嘿吉日,谢谢你的快速回复。我会检查这个,并让你知道它是否工作:) –

+0

创建一个工作簿变量,说'wb',然后在主循环中有'Set wb = Application.Workbooks.Open(fso.GetFile(fil.Path))' 。仍然在该循环的主体中,处理'wb',然后关闭它。这样,目录中的工作簿就会按顺序处理,这就是您想要的。这个问题可能有所帮助:http://stackoverflow.com/q/5851531/4996248 –

回答

0

试试这个:

Option Explicit 

Sub PopulateFinalFile() 

    Dim filpath As String 
    Dim fso As Scripting.FileSystemObject 
    Dim fil As Scripting.File 
    Dim fldr As Scripting.Folder 

    filpath = "C:\Users\user\Desktop\TEST" 
    Set fso = New Scripting.FileSystemObject 
    Set fldr = fso.GetFolder(filpath) 

    For Each fil In fldr.Files 
     Application.Workbooks.Open (fil.Path) 
    Next fil 


End Sub 

应该开始开扩逐一。

+1

HI Vityata,谢谢你的帮助。代码运行的很好。只有一个问题,你认为“updatelink”属性可能会推动workbook.open方法同时打开所有文件。因为当我第一次执行你的代码时,它会打开所有的文件,但是我稍微修改它以设置updatelinks,我工作。但我真诚地感谢你给予评论和帮助我的时间。 :) –

+0

恩,Idk。我想这是因为这个'(fso.GetFile(fil.Path))' – Vityata

+0

好的。你也可以分享一下我的另一个问题。我在这里重复一遍。我有fso.getfile生成了一个路径。现在我希望将这个文件分配给一个声明的WB对象,该对象将仅用作工作簿。 Workbooks.open(fil.path)确实指向该工作簿,但不打开它,我只想将其指定为工作簿而不是fso文件。 –