《VBA代碼解決方案》(版權10028096)這套教程是我最早推出的教程,目前已經是第三版修訂了。這套教程定位于入門后的提高,在學習這套教程過程中,側重點是要理解及掌握我的“積木編程”思想。要靈活運用教程中的實例像搭積木一樣把自己喜歡的代碼擺好。
這套教程共三冊,一百四十七講,內容覆蓋較廣,也是初級和中級間的過渡教程,改版后的內容主要是提供程序源碼文件及代碼修正為32位和64位兼用代碼。今后一段時間會給大家陸續推出。今日的內容是VBA代碼解決方案第二十六講:如何新建EXCEL工作簿文件
【分享成果,隨喜正能量】189 小小的善業,能贏來大的利益,小小的惡業,同樣也能招致嚴重的后果。這正如古語所云:“莫以善小而不為,莫以惡小而為之。。
第二十六講 如何新建EXCEL工作簿文件
各位好,今日我們講VBA代碼的第26講,如何新建EXCEL工作薄文件。對于工作薄的解釋,我們在之前的文章中已經講解過,要再復習一下,同時要注意工作薄和工作表的概念。工作薄是文件,工作表是工作薄的工作頁。在VBA中使用Add方法新建工作簿。
1 使用Workbooks對象的Add方法創建新工作簿
使用Workbooks對象的Add方法創建新工作簿,其語法為:
Workbooks對象.Add(Template)
參數Template可選,確定如何創建新工作簿。如果該參數指定的字符串是已有的Excel文件名,那么使用指定的文件作為模板創建新工作簿。如果該參數指定為xlWBATemplate常量之一,則新工作簿包含單個指定類型的工作表。如果忽略該參數,那么新工作簿包含標準的空工作表,可以使用SheetsInNewWorkbook屬性設置工作表數。
xlWBATemplate常量為:xlWBATChart,xlWBATExcel4IntlMacroSheet,xlWBATExcel4MacroSheet,xlWBATWorksheet。分別代表圖表工作表、宏工作表以及標準工作表。
2 新建EXCEL工作簿文件的實例代碼及代碼解讀
下面我們來詳細講解一下如何創建工作薄文件,如下面的代碼所示:
Sub mynz_26() '第26講 如何新建EXCEL工作簿文件
Dim Nowbook As Workbook
Dim ShName As Variant
Dim Arr As Variant
Dim i As Integer
Dim myNewWorkbook As Integer
myNewWorkbook = Application.SheetsInNewWorkbook
ShName = Array("余額數", "單價數", "數量", "金額數")
Arr = Array("1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月")
Application.SheetsInNewWorkbook = 4
Set Nowbook = Workbooks.Add
With Nowbook
For i = 1 To 4
With .Sheets(i)
.Name = ShName(i - 1)
.Range("B1").Resize(1, UBound(Arr) + 1) = Arr
.Range("A2") = "品名"
End With
Next
.SaveAs Filename:=ThisWorkbook.Path & "\" & "庫存.xlsx"
.Close Savechanges:=True
End With
Set Nowbook = Nothing
Application.SheetsInNewWorkbook = myNewWorkbook
End Sub
代碼窗口:
代碼解析:mynz_26()過程使用Add方法建立新的工作簿并對新建工作簿進行操作。
1) 第2行到第6行代碼聲明變量類型。
2) 第7行代碼保存Excel自動插入到新工作簿中的工作表數目。
3) 第8、9行代碼將數組元素賦值給變量。
4) 第10行代碼將Application對象的SheetsInNewWorkbook屬性設置為4,表示在新建工作簿時插入4張工作表。
5) 第11行代碼使用Add方法建立新的工作簿,應用于Workbooks對象的Add方法新建工作簿,新建的工作簿將成為活動工作簿。
6) 第12行到第22行代碼操作新建工作簿。
7) 第15行到第17行代碼將新建工作簿的工作表進行重命名并給單元格賦值。
8) 第20行代碼使用SaveAs方法將新建工作簿重命名為“庫存.xls”保存在同一目錄中。
9) 第21行代碼使用Close方法關閉工作簿。
10) 第24行代碼恢復工作簿的默認設置。
代碼的運行結果:新添了文件“庫存”,內容如下:
今日內容回向:
1 ADD方法是什么?
2 .Range("B1").Resize(1, UBound(Arr) + 1) = Arr 是什么意義?
本講內容參考程序文件:VBA代碼解決方案修訂(1-48).xlsm
我20多年的VBA實踐經驗,全部濃縮在下面的各個教程中: