0 總結
- VBA裏參數 filename:= 很靈活的一個參數
- 可能是帶路徑和後綴名的
- 也可以是純文件名,甚至後綴名都不帶。格式由fileformat指定
1 Workbooks.Add 方法
1.1 語法
- 新建一個工作表。新工作表將成爲活動工作表。
- 語法
- 表達式.Add(Template)
- 表達式 一個代表 Workbooks 對象的變量。
- 參數
- 名稱 必選/可選 數據類型 說明
- Template 可選 Variant 確定如何創建新工作簿。如果此參數爲指定現有 Microsoft Excel 文件名的字符串,那麼創建新工作簿將以該指定的文件作爲模板。如果此參數爲常量,新工作簿將包含一個指定類型的工作表。可爲以下 XlWBATemplate 常量之一:xlWBATChart、xlWBATExcel4IntlMacroSheet、xlWBATExcel4MacroSheet 或 xlWBATWorksheet。如果省略此參數,Microsoft Excel 將創建包含一定數目空白工作表的新工作簿(該數目由 SheetsInNewWorkbook 屬性設置)。
- 返回值
- 一個代表新工作簿的 Workbook 對象。
- 說明
- 如果 Template 參數指定的是文件,則該文件名可包含路徑。
1.2 workbooks.add 會自動打開一個“工作簿1”這類的wb文件,並activate之
- workbooks.add 會自動生成一個 " 工作簿N" 的WB文件,且active
- workbooks.add 在add後,會打開一個“工作簿1”這類的wb文件
- 並且最後add的 wb文件 成爲新的 activeworkbook
Sub test98()
Workbooks.Add
End Sub
1.3 workbooks.add(template)
template Variant 類型,可選
1.3.1 template如果指定爲 EXCEL內置的常量
- 可爲以下 XlWBATemplate 常量之一
- xlWBATChart
- xlWBATExcel4IntlMacroSheet
- xlWBATExcel4MacroSheet
- xlWBATWorksheet
Sub test91()
Workbooks.Add (xlWBATChart)
Workbooks.Add (xlWBATWorksheet)
Workbooks.Add (xlWBATExcel4MacroSheet)
Workbooks.Add (xlWBATExcel4IntlMacroSheet)
End Sub
1.3.2 若 template指定爲文本,文本是一個文件路徑,文件必須先存在
(暫時沒發現有什麼用處)
template 如果本參數爲指定一現有 Microsoft Excel 文件名的字符串,那麼創建新工作簿將以該指定的文件作爲模板
- 如果template指定爲文件,文件必須先存在,否則報錯。
- 那麼template爲一個路徑
- 如果是完整的絕對路徑,則需要帶path
- 如果只是相對路徑,那麼 excel 2010版本會去這兒找這個文件:D\用戶目錄/我的文檔下面 ,默認目錄?
- 好像指定過後會把新的路徑當默認路徑
Sub test96()
Workbooks.Add (ThisWorkbook.Path & "\" & ActiveSheet.Name & ".xlsx")
End Sub
Sub test97()
Workbooks.Add (ActiveSheet.Name & ".xlsx")
End Sub
2 Workbooks.save 方法
2.1 語法
- Workbook.Save 方法
- 保存對指定工作簿所做的更改。
- 語法
- 表達式.Save
- 表達式 一個代表 Workbook 對象的變量。
- 說明
- 要打開工作簿文件,請使用 Open 方法。
- 要將工作簿標記爲已保存,但不將其寫入磁盤,請將它的 Saved 屬性設置爲 True。
- 首次保存工作簿時,請使用 SaveAs 方法指定文件名。
2.2 常規保存
Sub test101()
ActiveWorkbook.Save
ThisWorkbook.Save
End Sub
2.3 新建文件的保存
- workbooks.add 會自動生成一個 " 工作簿N" 的WB文件,且active
- 如果只save 仍然只是保存在內存中
Sub test100()
Workbooks.Add
ActiveWorkbook.Save
ActiveWorkbook.Save
End Sub
- 新建wb文件,第一次保存在硬盤裏需要saveas
- saveas filename:= 完整的絕對路徑
Sub test111()
Workbooks.Add
' ActiveWorkbook.Save
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & ActiveSheet.Name & ".xlsx"
ActiveWorkbook.Close
End Sub
2.3 保存所有打開的wb文件,然後退出EXCEL
- 本示例保存所有打開的工作簿,然後關閉 Microsoft Excel。
- Application.Workbooks 只包括在內存中的wb文件
Sub test110()
'Visual Basic for Applications 官方例子
'官方例子不加 Dim w As Object 居然也能運行,原因不明白
For Each w In Application.Workbooks
w.Save
Next w
Application.Quit
End Sub
- 這樣的沒有官方的簡潔,而且沒退出EXCEL
Sub test112()
Dim wb As Object '沒這句也可以
For Each wb In Application.Workbooks
wb.Save
wb.Close
Next wb
End Sub
2.3.1 疑問?
- for each w in application.workbooks
- w確實不需要設置爲對象,或workbook也沒問題
3 workbooks().saveas
3.1 語法
- Excel 開發人員參考
- Workbook.SaveAs 方法
- 在另一不同文件中保存對工作簿所做的更改。
- 語法
- 表達式.SaveAs(FileName, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AccessMode, ConflictResolution, AddToMru, TextCodepage, TextVisualLayout, Local)
- 表達式 一個代表 Workbook 對象的變量。
- 說明
- 請使用同時包含大小寫字母、數字和符號的強密碼。弱密碼不混合使用這些元素。強密碼:Y6dh!et5。弱密碼:House27。請使用您可以記住的強密碼,這樣就不必將它寫下來。
參數
稱 | 必選/可選 | 數據類型 | 說明 | ||
---|---|---|---|---|---|
Filename | 可選 | Variant | 一個表示要保存文件的文件名的字符串。可包含完整路徑,如果不指定路徑,Microsoft Excel 將文件保存到當前文件夾中。 | ||
FileFormat | 可選 | Variant | 保存文件時使用的文件格式。要查看有效的選項列表,請參閱 XlFileFormat 枚舉。對於現有文件,默認採用上一次指定的文件格式;對於新文件,默認採用當前所用 Excel 版本的格式。 | ||
Password | 可選 | Variant | 它是一個區分大小寫的字符串(最長不超過 15 個字符),用於指定文件的保護密碼。 | ||
WriteResPassword | 可選 | Variant | 一個表示文件寫保護密碼的字符串。如果文件保存時帶有密碼,但打開文件時不輸入密碼,則該文件以只讀方式打開。 | ||
ReadOnlyRecommended | 可選 | Variant | 如果爲 True,則在打開文件時顯示一條消息,提示該文件以只讀方式打開。 | ||
CreateBackup | 可選 | Variant | 如果爲 True,則創建備份文件。 | ||
AccessMode | 可選 | XlSaveAsAccessMode | 工作簿的訪問模式。 | ||
ConflictResolution | 可選 | XlSaveConflictResolution | 一個 XlSaveConflictResolution 值,它確定該方法在保存工作簿時如何解決衝突。如果設爲 xlUserResolution,則顯示衝突解決對話框。如果設爲 xlLocalSessionChanges,則自動接受本地用戶的更改。如果設爲 xlOtherSessionChanges,則自動接受來自其他會話的更改(而不是本地用戶的更改)。如果省略此參數,則顯示衝突處理對話框。 | ||
AddToMru | 可選 | Variant | 如果爲 True,則將該工作簿添加到最近使用的文件列表中。默認值爲 False。 | ||
TextCodepage | 可選 | Variant | Microsoft Excel 中對於所有語言都忽略此參數。
|
||
TextVisualLayout | 可選 | Variant | Microsoft Excel 中對於所有語言都忽略此參數。
|
||
Local | 可選 | Variant | 如果爲 True,則以 Microsoft Excel(包括控制面板設置)的語言保存文件。如果爲 False(默認值),則以 Visual Basic for Applications (VBA) 的語言保存文件。VBA 通常爲美國英語版本,除非從中運行 Workbooks.Open 的 VBA 項目是舊的國際化 XL5/95 |
filename:= 可以帶完整路徑 或 是簡單文件名不帶後綴配合fileformat都可以
Sub test111()
Workbooks.Add
' ActiveWorkbook.Save
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & ActiveSheet.Name & ".xlsx"
ActiveWorkbook.Close
End Sub
創建後保存,且要求用戶輸入文件名後在 saveas
- 官方例子
- 本示例新建一個工作簿,提示用戶輸入文件名,然後保存該工作簿。
- 這裏注意,輸入的文件得是EXCEL類型的後綴名
Sub test113()
'Visual Basic for Applications 官方例子
Set NewBook = Workbooks.Add
Do
fName = Application.GetSaveAsFilename
Loop Until fName <> False
NewBook.SaveAs Filename:=fName
End Sub
創建後保存,且要求用戶輸入文件名爲.xlsx
- 我拿官方的例子改的
- 因爲官方的例子在2010EXCEL裏,直接保存,很可能會保存爲一個後綴名不對的文件導致無法打開。
- EXCEL的 workbook 文件
Sub test114()
Workbooks.Add
Do
MsgBox "請輸入完整的excel文件名,以.xlsx結尾"
fname = Application.GetSaveAsFilename
Loop Until fname Like "*.xlsx"
ActiveWorkbook.SaveAs Filename:=fname
ActiveWorkbook.Close
End Sub
保存爲EXCEL
- fileformat:=xlExcel5 (xlExcel7 或 xlExcel8 ) 都保存的xls類型的,其他的很多不太好用
文件保存在哪兒?
- 可以保存爲絕對路徑,且帶後綴名
- 也可以只保存爲 文件名,會被認爲是相對路徑,保存在 thisworkbook.path 當前的路徑下
文件的格式( filename 一次指定簡潔,但應該 fileformat更準確)
- 可以保存爲絕對路徑,且帶後綴名
- 也可以純文件名,帶後綴名
- 也可以不帶後綴名,由 fileformat 指定
- 但是如果雙重指定,要注意不要衝突
- 比如文件名也帶了後綴,fileformat 又指定了一次,應該以fileformat 爲主,兩者如果不一致會導致文件打不開。
密碼
- password 打開密碼
- writeprespassword 寫的密碼
Sub test116()
Set wb1 = Workbooks.Add
wb1.SaveAs Filename:="123.xlsx", Password:=123, writerespassword:=456
wb1.Close
End Sub
文件名只寫名字,格式後綴由fileformat指定的例子
Sub test117()
Set wb1 = Workbooks.Add
wb1.SaveAs Filename:="111222333", FileFormat:=xlExcel8, Password:=123, writerespassword:=456
wb1.Close
End Sub
保存路徑爲絕對路徑的例子
Sub test118()
Set wb1 = Workbooks.Add
wb1.SaveAs "c:\abc", FileFormat:=xlExcel5, Password:=123, writerespassword:=456
wb1.Close
End Sub
保存爲csv
- 保存爲不同文件時,文件名和文件格式,需要一致
- 另外,WB的屬性,對於能保存的一些格式,可能不生下來,比如密碼
- csv就不能帶密碼
Sub test115()
Application.displayalert = False
Set wb1 = Workbooks.Add
'保存的文件名需要和 fileformat一致,或者只來1個
'csv本身是文本文件,不能加密
'直接保存爲csv 只會有1個sheet
wb1.SaveAs Filename:="123.csv", FileFormat:=xlCSV, Password:=123
wb1.Close
Application.displayalert = True
End Sub
保存爲TXT
- 可見 .txt 對應的文件類型就是 效率 xlunicodeText
- fileformat 設置格式更準確,比如保存爲txt,最好還是把 fileformat指定爲 xlunicodeText
Sub test122()
Set wb1 = Workbooks.Add
wb1.SaveAs Filename:="123.txt" '這樣雖然保存爲了txt,但打開會亂碼
wb1.Close
End Sub
這樣設置TXT的顯示格式沒問題
Sub test119()
Set wb1 = Workbooks.Add
wb1.SaveAs Filename:="123", FileFormat:=xlUnicodeText
wb1.Close
End Sub
Sub test121()
Application.DisplayAlerts = flase
Set wb1 = Workbooks.Add
wb1.SaveAs Filename:="123.txt", FileFormat:=xlUnicodeText
wb1.Close
Application.DisplayAlerts = True
End Sub
4 workbooks().savecopyas(filename) 就1個參數
4.1 語法
- Workbook.SaveCopyAs 方法
- 將指定工作簿的副本保存到文件,但不修改內存中的打開工作簿。
- 語法
- 表達式.SaveCopyAs(Filename)
- 表達式 一個代表 Workbook 對象的變量。
- 參數
- 名稱 必選/可選 數據類型 說明
- Filename 可選 Variant 指定副本的文件名。
Sub test131()
'這樣保存的後綴名會可以打開文件... .xls
ThisWorkbook.SaveCopyAs Filename:=ThisWorkbook.Path & "\" & ActiveSheet.Name & ".xls"
End Sub
Sub test132()
'這樣保存的後綴名會打不開文件... .xlsx,得改成xlsm
'估計都是和EXCEL版本有關 xls保險一些,因爲xls是老格式,可以包含xlsm裏的 VBA
ThisWorkbook.SaveCopyAs Filename:=ThisWorkbook.Path & "\" & ActiveSheet.Name & ".xlsm"
End Sub
Sub test133()
'這樣保存的後綴名會打不開文件...
'ThisWorkbook.SaveCopyAs (ThisWorkbook.Path & "\" & ActiveSheet.Name & ".xlsx")
ThisWorkbook.SaveCopyAs (ThisWorkbook.Path & "\" & ActiveSheet.Name & ".xlsm")
end sub
5 保存後的文件打不開的問題
workbooks.saveas
- 要麼filename , 或fileformat 其中之一指定即可
- 如果兩者都指定了,要注意filename:= fileformat:= 兩者格式需要保持一致
- 一般如果保存爲 excel相關的,可以指定saveas 時加上文件類型 FileFormat:=xlOpenXMLWorkbook
workbooks.savecopyas
- 如果是savecopyas ,必須是現在文件相同的格式(savecopyas 參數很少)
Sub test112()
'必須保存爲和當前thisworkbook.xlsm相同的文件類型,否則打不開
'如果保存爲了xlsx,使用時新文件就會提示打不開
ThisWorkbook.SaveCopyAs Filename:=ThisWorkbook.Path & "\" & "newWB2.xlsm"
End Sub