2016-08-17 32 views
0

如何編寫一個宏,該工作簿通過打開的工作簿運行,並根據每個工作簿的內容使用特定名稱進行保存。每個工作簿在工作表「Book1」中都有唯一的列標題,因此工作簿可以由單元格A1中的文本確定。如果工作簿和工作表Book1和單元格A1 =「貨幣」將活動工作簿另存爲Y:\ risk \ CCY.csv,如果單元格A1 =「興趣」將活動工作簿另存爲Y:\ risk \ IR.csv。循環瀏覽所有打開的工作簿,直到沒有打開的工作簿符合條件。Excel宏可保存所有打開的工作簿(如果它們符合特定條件)

+2

你是否試圖編寫一個宏來做到這一點,或者你甚至試圖記錄宏(當你完成任務),看看Excel在做什麼? – Clauric

回答

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 
+0

感謝您花時間在此並感謝您提供的建議代碼。這些論壇對我來說是新的,顯然我誤解了一些東西。有趣的是,你會遇到不太歡迎的評論。我幾乎沒有VBA的經驗,但幾年(幾十年)的Excel功能和標準的宏錄製。我沒有讓代碼工作100%,但我會努力工作,看看我能否解決它。它找到一個「案例」並將其保存爲兩個不同的名稱。 – user6726550

+0

沒問題。如果您發現答案是最佳解決方案,請確保您繼續並將其標記爲已接受! – SandPiper

1

我同意,@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 
相關問題