【问题标题】:Excel macro that saves all open workbooks if they meet certain criteriaExcel 宏,如果它们符合某些条件,则保存所有打开的工作簿
【发布时间】:2016-08-17 14:12:38
【问题描述】:

如何编写一个贯穿打开的工作簿并根据每个工作簿的内容以特定名称保存它们的宏。每个工作簿在工作表“Book1”中都有唯一的列标题,因此工作簿可以由单元格 A1 中的文本确定。如果工作簿和工作表 Book1 和单元格 A1 = "Currency" 将活动工作簿保存为 Y:\risk\CCY.csv 如果单元格 A1 = "Interest" 将活动工作簿保存为 Y:\risk\IR.csv。遍历所有打开的工作簿,直到没有打开的工作簿符合条件。

【问题讨论】:

  • 您是否尝试过编写宏来执行此操作,或者您是否尝试过录制宏(在完成任务时)以查看 Excel 在做什么?

标签: vba excel macros


【解决方案1】:

您有使用 VBA 的经验吗?我使用宏记录器来弄清楚如何保存。我编写了以下代码并对其进行了测试,它对我来说效果很好。我确实尝试运行它两次,它提示我是否要覆盖文件。但是,它没有内置其他错误处理。

Sub SaveWorkbooks()

Dim WB As Workbook
Dim FileName As String, FolderPath As String
Dim SaveWorkbook As Boolean

FolderPath = "Y:\risk"
ChDir FolderPath

For Each WB In Workbooks
    Select Case WB.Sheets(1).Range("A1").Value
        Case Is = "Currency"
            FileName = "CCY"
        Case Is = "Interest"
            FileName = "IR"
        Case Else
            FileName = ""
    End Select
    'Make sure it's not saving not applicable workbooks
    If FileName <> "" Then SaveWorkbook = True Else SaveWorkbook = False

    If SaveWorkbook = True Then
        ActiveWorkbook.SaveAs FileName:=FolderPath & "\" & FileName & ".xlsx", _
            FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
    End If

Next WB

End Sub

【讨论】:

  • 感谢您花时间在此上,并感谢您提供建议的代码。这些论坛对我来说是新的,显然我误解了一些东西。有趣的是,您遇到的不是那么欢迎的言论。我几乎没有 VBA 经验,但有多年(几十年)的 excel 函数和标准宏录制。我没有让代码 100% 工作,但我会继续努力,看看我能不能解决它。它找到一个“案例”并将其保存为两个不同的名称。
  • 没问题。如果您发现答案是最佳解决方案,请确保继续并将其标记为已接受!
【解决方案2】:

我同意,@thecoshman 这伤害了我的眼睛阅读。这一次我会破例。试试这个:

Sub SaveWorkbooks()
Dim workbookObj As Workbook

For Each workbookObj In Excel.Workbooks
    If workbookObj.Sheets("Book1").Range("A1").Value = "whatever" Then
        workbookObj.Save
        workbookObj.Close
    End If
Next workbookObj

'Clean up
Set workbookObj = Nothing
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多