【问题标题】:VBA code to run on all workbooks with conditions在所有工作簿上运行的 VBA 代码有条件
【发布时间】:2015-03-02 09:39:27
【问题描述】:

除了手动记账外,我将所有与分期付款销售相关的数据都保存在 Excel 文件中。我使用的模板类似于发票,但也显示了到期日、付款日期、已支付的分期付款金额和客户的余额。

我目前正在管理我们 4 个分支机构的销售数据。我拥有的文件夹是 Branch-1、Branch-2、Branch-3 和 Branch-4。

这些文件夹中的每一个都包含根据销售年份命名的子文件夹,例如从 2006 年到 2015 年,每个文件夹有 12 个工作簿(2006 年 1 月.xls、2006 年 2 月.xls 等等,直到 2015 年 3 月.xls 在名为 2015 的文件夹中)。这些工作簿中的每一个都有不同数量的工作表,这些工作表根据分配给客户的帐号命名。

我正在寻找一种解决方案,以在文件夹中的所有工作簿中以特定条件运行代码。我使用简单的代码遍历工作簿中的所有工作表,从所有工作表中的某些单元格中提取数据,并通过逐行粘贴数据在名为“摘要”的工作表中创建摘要。

Sub Create_Summary()

Dim wksht As Worksheet: Set wksht = Sheets("Summary")
Dim ws As Worksheet
Dim LR As Long

Application.ScreenUpdating = False

For Each ws In Worksheets

    If ws.Name <> wksht.Name Then

        LR = wksht.Range("A" & Rows.Count).End(xlUp).Row + 1

        wksht.Range("A" & LR) = ws.Range("H2")
        wksht.Range("B" & LR) = ws.Range("B2")
        wksht.Range("C" & LR) = ws.Range("B4")
        wksht.Range("D" & LR) = ws.Range("C2")
        wksht.Range("E" & LR) = ws.Range("B3")
        wksht.Range("F" & LR) = ws.Range("E3")
        wksht.Range("G" & LR) = ws.Range("H3")
        wksht.Range("H" & LR) = ws.Range("H1")
        wksht.Range("I" & LR) = ws.Range("F48")
        wksht.Range("J" & LR) = ws.Range("H13")
        wksht.Range("K" & LR) = ws.Range("H12")
        wksht.Range("L" & LR) = ws.Range("H14")
        wksht.Range("M" & LR) = ws.Range("H15")

    End If

Next ws

Application.ScreenUpdating = True

End Sub

我在所有工作簿中都运行此代码,这很耗时。我必须通过添加标题、列中的标题、设置所需的列宽等来自定义摘要表的格式。然后我必须复制所有表并粘贴到另一个工作簿中以完成任何分支的主摘要,以便我拥有完整的客户2006 年至 2015 年在任一分支机构的信息。除了主摘要表之外,我还需要准备两张表,一张显示客户的余额,另一张显示剩余余额的条件,即 H13 的数据超过 0 (H13>0) 省略了 H13 的任何帐户=0。

我正在寻找一个宏或 3 个宏(考虑到我上面提到的 2 个条件),它们贯穿我的所有工作簿(不包括每个工作簿中名为 Summary 的工作表)分支,从单元格收集数据,粘贴到一个带有列标题的主工作表行,根据单元格中文本占用的空间设置列宽,主标题为分支文件夹名称并显示创建摘要的日期 - 时间。我在 Excel 方面的专业知识非常有限,并且有学习更多知识的意愿,因此我们将非常感谢任何形式的帮助。

我附上文件以便更好地了解我的要求。

文件:2014 年 2 月.xls HTML 代码: https://drive.google.com/file/d/0B0L43wu5SnIoWklmNTVNSnNHbWM/view?usp=sharing

文件:2014 年 3 月.xls HTML 代码: https://drive.google.com/file/d/0B0L43wu5SnIoQjRTdnRCRGxLRWM/view?usp=sharing

这 2 个文件是 Branch 1 文件夹中名为 2014 的示例文件。

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    如果您查看参考“Microsoft Scripting Runtime”,您可以使用 FileSystemObject 来导航文件夹和文件(以查找您的工作簿)

    dim fso as FileSystemObject
    dim folder as Scripting.folder
    dim file as Scripting.file
    
    set fso = new FileSystemObject
    set folder = fso.getFolder("Branch-1")
    for each file in folder.Files
        ' open workbooks, assign worksheet-variables and run your code
    next file
    

    您可以通过以下方式打开工作簿:

    dim wb = as Workbook
    set wb = Workbooks.Open("path")
    

    然后像你已经在做的那样处理工作表和范围。

    【讨论】:

      猜你喜欢
      • 2014-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多