VBA,工作簿workbook相關操作,workbooks.add workbooks.save workbooks.saveas 等等

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 中對於所有語言都忽略此參數。
註釋
當 Excel 將工作簿保存爲某種 CSV 或文本格式(使用 FileFormat 參數指定)時,Excel 使用對應於當前計算機上使用的系統區域設置語言的代碼頁。在“控制面板”中單擊“區域和語言”,再單擊“位置”選項卡,在“當前位置”下可獲得此係統設置。
TextVisualLayout 可選 Variant Microsoft Excel 中對於所有語言都忽略此參數。
註釋
當 Excel 將工作簿保存爲某種 CSV 或文本格式(使用 FileFormat 參數指定)時,它按邏輯佈局保存這些格式。如果文件中左至右 (LTR) 文本嵌在右至左 (RTL) 文本中,或者相反,那麼邏輯佈局將把文件的內容,按照文件中所有語言的正確閱讀順序保存,而不考慮方向。當應用程序打開文件時,每串 LTR 或 RTL 字符將根據代碼頁中的字符值範圍,按照正確的方向呈現。(除非用來打開文件的應用程序是爲顯示文件的確切內存佈局而設計的應用程序,如調試器或編輯器)。
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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章