【问题标题】:Open files with a loop循环打开文件
【发布时间】:2020-05-14 17:57:10
【问题描述】:

在一个文件夹中,我有不同的 Excel 工作簿,如下所示:

Exercise1
Exercise2
Exercise3
...
ExerciseN

我想在不同工作表上的同一个 Excel 工作簿中打开文件夹中的所有文件(所有 .xls)。

我想应该是这样的,但不是:

Sub Macro1()
    For i = 1 To ?? 
        Workbooks.Open Filename:="C:\Exercisei.xls"
    Next i
End Sub

【问题讨论】:

  • 每个练习都是一张 xls 工作簿?
  • 在此处列出和循环遍历指定文件夹中给定类型的所有文件的示例:stackoverflow.com/questions/3017318/…
  • 是否要将这些工作表从打开的工作簿复制到源工作簿?您不能只将 2 个单独的工作簿作为 1 个工作簿打开 - 您可以复制电子表格或作为 2 个单独的工作簿打开。希望这是有道理的

标签: excel vba


【解决方案1】:

此示例适用于 2 .xls 文件:

Sub qwerty()
    Dim master As Workbook, awb As Workbook
    Dim N As Long
    Dim s1 As String, s2 As String, i As Long
    N = 2
    Set master = ThisWorkbook
    s1 = "C:\TestFolder\Examplez.xls"

    For i = 1 To N
        s2 = Replace(s1, "z", CStr(i))
        Workbooks.Open Filename:=s2
        Set awb = ActiveWorkbook
        ActiveSheet.Copy after:=master.Sheets(master.Sheets.Count)
        awb.Close
    Next i
End Sub

将每个工作表复制到主工作簿,然后关闭 Example.xls。
您将更改文件夹名称并调整要处理的文件数。

【讨论】:

    【解决方案2】:

    以下代码是一个简单的子例程,用于打开定义文件夹中的所有 excel 文件。您可以在变量中调整文件名。我已经简化了这里定义的宏Files in a Directory

    Sub openfiles()
    Dim directory As String, fileName As String, sheet As Worksheet, i As Integer, j As Integer
    Application.ScreenUpdating = False
    directory = "c:\test\"
    fileName = Dir(directory & "*.xl??") '<-- you can use * and ? wild cards here.
        Do While fileName <> ""
        Workbooks.Open (directory & fileName)
        fileName = Dir()
        Loop
    Application.ScreenUpdating = True
    End Sub
    

    【讨论】:

    • @vba4all 感谢您的指出。我刚刚又读了一遍帖子,我认为你是对的,这是一种识别问题的有趣方式:)
    • 顺便说一句,我提供的链接包括从打开的文档中获取工作表名称。如果他愿意,他可以调整该代码以将工作表复制到他的原始文件中。我猜。
    • 你也忘了在循环中包含Dir 无论如何都要遍历所有这些......
    • @Raugmor 感谢您的反馈。我已经相应地更新了代码。现在它对我来说工作正常。正如我在帖子中提到的,这是一种非常基本的方法,可能不是最好的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-17
    • 1970-01-01
    相关资源
    最近更新 更多