Excel 工作簿。打开以依次打开多个文件
我在“最终文件夹”中有6个Excel文件。我需要依次打开每一个,从运行代码的工作簿中输入一些数据(我将此工作簿用作源代码) 代码将同时打开所有6个文件,而不是依次打开它们 运行Excel 工作簿。打开以依次打开多个文件,excel,vba,Excel,Vba,我在“最终文件夹”中有6个Excel文件。我需要依次打开每一个,从运行代码的工作簿中输入一些数据(我将此工作簿用作源代码) 代码将同时打开所有6个文件,而不是依次打开它们 运行工作簿时会出现这种情况。在循环中打开,默认情况下所有文件都会打开 Sub PopulateFinalFile() Dim filpath As String Dim fso As Scripting.FileSystemObject Dim fil As Scripting.File Di
工作簿时会出现这种情况。在循环中打开,默认情况下所有文件都会打开
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
一样,它返回一个路径。当我向工作簿传递路径时,我需要使用工作簿。打开(路径)
,但我只想指向该工作簿,而不是打开它。尝试以下操作:
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
它应该开始逐个打开它们。试试以下方法:
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
它应该开始逐个打开它们。添加到Vityata以涵盖问题的第二部分:
Option Explicit
Sub PopulateFinalFile()
Dim filpath As String
Dim fso As Scripting.FileSystemObject
Dim fil As Scripting.File
Dim fldr As Scripting.Folder
Dim wb as workbook
filpath = "C:\Users\user\Desktop\TEST"
Set fso = New Scripting.FileSystemObject
Set fldr = fso.GetFolder(filpath)
For Each fil In fldr.Files
set wb = Application.Workbooks.Open(fil.Path) 'no space after open !
'do some stuff with wb
wb.close 'close wb
Next fil
End Sub
添加到Vityata以涵盖问题的第二部分:
Option Explicit
Sub PopulateFinalFile()
Dim filpath As String
Dim fso As Scripting.FileSystemObject
Dim fil As Scripting.File
Dim fldr As Scripting.Folder
Dim wb as workbook
filpath = "C:\Users\user\Desktop\TEST"
Set fso = New Scripting.FileSystemObject
Set fldr = fso.GetFolder(filpath)
For Each fil In fldr.Files
set wb = Application.Workbooks.Open(fil.Path) 'no space after open !
'do some stuff with wb
wb.close 'close wb
Next fil
End Sub
如果按顺序打开多个文件,则需要在工作簿中使用MultiSelect。打开代码:Application.Workbooks.open(fso.GetFile(fil.path),MultiSelect:=True)
。此外,当使用MultiSelect时,文件的顺序将不再保留,因此需要提供循环。请尝试此帖子寻求帮助[链接]()嘿,Jiri,谢谢你的快速回复。我会检查它并让您知道它是否有效:)创建一个工作簿变量,比如说wb
,然后在主循环中设置wb=Application.Workbooks.Open(fso.GetFile(fil.Path))
。仍然在该循环的主体中,处理wb
,然后关闭它。这样,目录中的工作簿将按顺序处理,这似乎是您想要的。这个问题可能会有所帮助:嘿,我在先前解决问题的尝试中尝试了WB变量方法,但它似乎返回了相同的错误。同样对于Application.workbooks.open语法,我没有得到multiselect选项。它反映为语法错误(以红色突出显示)。我正在运行windows 8 office 2013如果要打开多个文件,则需要在工作簿中使用MultiSelect。打开代码:Application.Workbooks.open(fso.GetFile(fil.path),MultiSelect:=True)
。此外,当使用MultiSelect时,文件的顺序将不再保留,因此需要提供循环。请尝试此帖子寻求帮助[链接]()嘿,Jiri,谢谢你的快速回复。我会检查它并让您知道它是否有效:)创建一个工作簿变量,比如说wb
,然后在主循环中设置wb=Application.Workbooks.Open(fso.GetFile(fil.Path))。仍然在该循环的主体中,处理wb,然后关闭它。这样,目录中的工作簿将按顺序处理,这似乎是您想要的。这个问题可能会有所帮助:嘿,我在先前解决问题的尝试中尝试了WB变量方法,但它似乎返回了相同的错误。同样对于Application.workbooks.open语法,我没有得到multiselect选项。它反映为语法错误(以红色突出显示)。我正在运行windows 8 office 2013HI Vityta,感谢您的帮助。代码运行得很好。只有一个问题,您是否认为“updatelink”属性可能会推动workbook.open方法同时打开所有文件。因为当我第一次执行你的代码时,它打开了所有的文件,但后来我稍微修改了它以关闭UpdateLink,我成功了。但我衷心感谢您抽出时间来评论和帮助我。:)嗯,Idk。我想这是因为这个(fso.GetFile(fil.Path))
Ok。另外,你能谈谈我的另一个问题吗。我在这里重复一遍。我已经生成了一个fso.getfile路径。现在,我希望将此文件分配给一个声明的WB对象,该对象将仅用作工作簿。Workbooks.open(fil.path)确实指向该工作簿,但我不想打开它,只想将其作为工作簿指向,而不是fso文件。此外,我不知道我是否会因为另一个问题而过于侥幸。我现在有一个循环计数器生成一个数字,如果我想用它来引用给定路径上的一个workook。例如,文件夹x有6个excel工作簿,我想引用第n个(由循环计数器决定)文件,这不适用于application.workbooks.open(loopcounter),因为未提及源路径。我现在真的必须站起来,但为什么不在StackOverflow中单独询问它呢?只要你描述得好,你很可能会得到一个很好的答案。代码运行得很好。只有一个问题,您是否认为“updatelink”属性可能会推动workbook.open方法同时打开所有文件。因为当我第一次执行你的代码时,它打开了所有的文件,但后来我稍微修改了它以关闭UpdateLink,我成功了。但我衷心感谢您抽出时间来评论和帮助我。:)嗯,Idk。我想这是因为这个(fso.GetFile(fil.Path))
Ok。另外,你能谈谈我的另一个问题吗。我在这里重复一遍。我已经生成了一个fso.getfile路径。现在,我希望将此文件分配给一个声明的WB对象,该对象将仅用作工作簿。Workbooks.open(fil.path)确实指向该工作簿,但我不想打开它,只想将其作为工作簿指向,而不是fso文件。此外,我不知道我是否会因为另一个问题而过于侥幸。我现在有一个循环计数器生成一个数字,如果我想用它来引用给定路径上的一个workook。例如,文件夹x有6个excel工作簿,我想引用第n个(由循环计数器决定)文件,这不适用于application.workbooks.open(loopcounter),因为未提及源路径。我现在真的必须站起来,但为什么不在StackOverflow中单独询问它呢?只要你描述得好,你很可能会得到一个好的答案。