Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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 工作簿。打开以依次打开多个文件_Excel_Vba - Fatal编程技术网

Excel 工作簿。打开以依次打开多个文件

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

我在“最终文件夹”中有6个Excel文件。我需要依次打开每一个,从运行代码的工作簿中输入一些数据(我将此工作簿用作源代码)

代码将同时打开所有6个文件,而不是依次打开它们

运行
工作簿时会出现这种情况。在循环中打开
,默认情况下所有文件都会打开

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中单独询问它呢?只要你描述得好,你很可能会得到一个好的答案。