如果符合特定条件,Excelmacros将保存所有打开的工作簿

如何编写一个通过打开的工作簿运行的macros,并根据每个工作簿的内容将它们保存为一个特定的名称。 每个工作簿在工作表“Book1”中都有唯一的列标题,因此可以通过单元格A1中的文本确定工作簿。 如果工作簿和工作表Book1和单元格A1 =“货币”将活动工作簿保存为Y:\ risk \ CCY.csv如果单元格A1 =“兴趣”将活动工作簿另存为Y:\ risk \ IR.csv。 循环浏览所有打开的工作簿,直到没有打开的工作簿符合条件。

你有没有使用VBA的经验? 我用macroslogging器来弄清楚如何保存。 我做了下面的代码并进行了testing,对我来说工作得很好。 我曾尝试两次运行它,并提示我是否要覆盖该文件。 虽然没有内置的其他error handling。

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 

我同意@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