正文開始前,先插播一條廣告DimArr As Variant
Dimi As Integer
DimmyNewWorkbook As Integer
myNewWorkbook= Application.SheetsInNewWorkbook
ShName= Array('余額','單價(jià)','數(shù)量','金額')
Arr= Array('01月','02月','03月','04月','05月','06月','07月','08月','09月','10月','11月','12月')
Application.SheetsInNewWorkbook= 4
SetNowbook = Workbooks.Add
WithNowbook
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 &'\' & '存貨明細(xì).xls'
.Close Savechanges:=True
EndWith
SetNowbook = Nothing
Application.SheetsInNewWorkbook= myNewWorkbook
End Sub
代碼解析:
AddNowbook過(guò)程使用Add方法建立新的工作簿并對(duì)新建工作簿進(jìn)行操作。
第2行到第6行代碼聲明變量類型。
第7行代碼保存Excel自動(dòng)插入到新工作簿中的工作表數(shù)目。
第8、9行代碼將數(shù)組元素賦值給變量。
第10行代碼將Application對(duì)象的SheetsInNewWorkbook屬性設(shè)置為4,在新建工作簿時(shí)插入4張工作表。
第11行代碼使用Add方法建立新的工作簿,應(yīng)用于Workbooks對(duì)象的Add方法新建工作簿,新建的工作簿將成為活動(dòng)工作簿。
第12行到第22行代碼操作新建工作簿。其中第15行到第17行代碼將新建工作簿的工作表進(jìn)行重命名并給單元格賦值。第20行代碼使用SaveAs方法將新建工作簿重命名為“存貨明細(xì).xls”保存在同一目錄中。第21行代碼使用Close方法關(guān)閉工作簿。
第24行代碼恢復(fù)工作簿的默認(rèn)設(shè)置。
運(yùn)行AddNowbook過(guò)程將在工作簿同一目錄中新建“存貨明細(xì).xls”工作簿,新建工作簿格式。
注意本例中沒有考慮工作簿同名因素,如果目錄中已有“存貨明細(xì).xls”工作簿,運(yùn)行時(shí)會(huì)顯示對(duì)話框,選擇“是”即可,否則將會(huì)出錯(cuò)。
▲042 打開指定的工作簿
VBA中使用Open方法打開一個(gè)工作簿,如下面的代碼所示。
Sub Openfile()
Dimx As Integer
Forx = 1 To Workbooks.Count
If Workbooks(x).Name = '123.xls'Then
MsgBox ““'123”“工作簿已經(jīng)打開!'
Exit Sub
End If
Next
Workbooks.OpenThisWorkbook.Path & '\123.xls'
End Sub
代碼解析:
Openfile過(guò)程打開同一目錄中的“123”工作簿。
第3行代碼利用Workbook對(duì)象的Count屬性取得打開工作簿的數(shù)目,使用For...Next 語(yǔ)句遍歷所有打開的工作簿。遍歷工作簿除了使用For...Next 語(yǔ)句外還可以使用For...Each...Next語(yǔ)句來(lái)遍歷Workbook對(duì)象集合中的所有元素,請(qǐng)參閱▲46-1。
第4行到第8行代碼遍歷所有打開的工作簿,如果Workbook對(duì)象集合中存在“123”工作簿,說(shuō)明“123”工作簿已打開。
第9行代碼如果“123”工作簿沒有被打開則使用Open方法打開“123”工作簿。
Open方法應(yīng)用于Workbooks 對(duì)象時(shí)打開一個(gè)工作簿,語(yǔ)法如下:
expression.Open(FileName,UpdateLinks,ReadOnly,Format,Password,WriteResPassword,IgnoreReadOnlyRecommended,Origin,Delimiter,Editable,Notify,Converter,AddToMru,Local,CorruptLoad)
參數(shù)expression是必需的,返回一個(gè)Workbooks對(duì)象
參數(shù)FileName是必需的,要打開的工作簿的文件名。
參數(shù)UpdateLinks是可選的,指定文件中鏈接的更新方式。如果省略本參數(shù),則提示用戶選擇鏈接的更新方式。否則,該參數(shù)的取值應(yīng)為表格中的某個(gè)值。
參數(shù)ReadOnly是可選的,如果該值為True,則以只讀模式打開工作簿。
參數(shù)Format是可選的,如果MicrosoftExcel正在打開一個(gè)文本文件,則該參數(shù)用于指定分隔字符,如表格所示。如果省略本參數(shù),則使用當(dāng)前的分隔符。
參數(shù)Password是可選的,該字符串指定打開一個(gè)受保護(hù)工作簿的密碼。如果省略該參數(shù)并且指定工作簿已設(shè)置密碼,則提示用戶輸入密碼。
參數(shù)WriteResPassword是可選的,該字符串為一個(gè)寫保護(hù)工作簿的寫入權(quán)密碼。如果省略該參數(shù)并且指定工作簿已設(shè)置密碼,則提示用戶輸入密碼。
參數(shù)IgnoreReadOnlyRecommended是可選的,如果該值為True,則設(shè)置Microsoft Excel不顯示建議只讀消息(如果該工作簿以“建議只讀”選項(xiàng)保存)。
參數(shù)Origin是可選的,如果文件為文本文件,則該參數(shù)用于指示該文件來(lái)源于何種操作系統(tǒng)。
參數(shù)Delimiter是可選的,如果該文件為文本文件并且Format參數(shù)為 6,則此參數(shù)用于指定用作分隔符的字符。
參數(shù)Editable是可選的,如果該文件為MicrosoftExcel 4.0加載宏,則該參數(shù)的值為True時(shí)可打開該加載宏以便在窗口中看到。如果該參數(shù)的值為False或者省略該參數(shù),則該加載宏以隱藏方式打開,并且無(wú)法設(shè)為可見。
參數(shù)Notify是可選的,當(dāng)該文件不能以可讀寫模式打開時(shí),如果該參數(shù)的值為True,則可將該文件添加到文件通知列表。
參數(shù)Converter是可選的,打開文件時(shí)試用的第一個(gè)文件轉(zhuǎn)換器的索引號(hào)。
參數(shù)AddToMru是可選的,如果該值為True,則將該工作簿添加到最近使用的文件列表中。默認(rèn)值為False。
參數(shù)Local是可選的,如果該值為True,則以Microsoft Excel(包括控制面版設(shè)置)的語(yǔ)言保存文件。如果該值為False(默認(rèn)值),則以 VisualBasic for Applications (VBA)的語(yǔ)言保存文件,其中VisualBasic for Applications (VBA)為典型安裝的美國(guó)英語(yǔ)版本,除非VBA項(xiàng)目的Workbooks.Open來(lái)自舊的國(guó)際化的XL5/95 VBA項(xiàng)目。
參數(shù)CorruptLoad是可選的,可為以下常量之一:xlNormalLoad、xlRepairFile 和 xlExtractData。如果未指定任何值,則默認(rèn)值通常為普通狀態(tài)。
▲043 判斷指定工作簿是否打開
043-1 遍歷Workbooks集合方法
通過(guò)遍歷當(dāng)前應(yīng)用程序所有已打開的工作簿文件(Workbooks集合),判斷指定名稱的工作簿是否打開,如下面的代碼所示。
Sub WorkbookIsOpen_1()
DimWb As Workbook
DimmyWb As String
myWb= 'Excel Home.xls'
ForEach Wb In Workbooks
If Wb.Name = myWb Then
MsgBox '工作簿' & myWb & '已經(jīng)被打開!'
Exit Sub
End If
Next
MsgBox'工作簿' & myWb & '沒有被打開!'
End Sub
代碼解析:
WorkbookIsOpen_1過(guò)程通過(guò)遍歷當(dāng)前應(yīng)用程序中所有已打開的工作簿文件(Workbooks集合),判斷“Excel Home”工作簿是否打開。
第5行代碼使用For...Each...Next語(yǔ)句來(lái)遍歷Workbook對(duì)象集合中的所有元素。
第6行到第8行代碼如果Workbook對(duì)象集合包含“Excel Home.xls”工作簿名稱,說(shuō)明文件已打開,使用Exit Sub語(yǔ)句結(jié)束代碼的運(yùn)行。
第11行代碼如果運(yùn)行到此行代碼說(shuō)明“Excel Home.xls”工作簿沒有被打開。
043-2 錯(cuò)誤處理方法
使用錯(cuò)誤處理程序判斷指定名稱的工作簿是否打開,如下面的代碼所示。
Sub WorkbookIsOpen_2()
DimWb As Workbook
DimmyWb As String
myWb= 'Excel Home.xls'
Err.Clear
On ErrorGoTo line
SetWb = Application.Workbooks(myWb)
MsgBox'工作簿' & myWb & '已經(jīng)被打開!'
SetWb = Nothing
ExitSub
line:
MsgBox'工作簿' & myWb & '沒有被打開!'
SetWb = Nothing
End Sub
代碼解析:
WorkbookIsOpen_2過(guò)程使用錯(cuò)誤處理程序判斷“Excel Home”工作簿是否打開。
第5行代碼使用Clear方法清除Err對(duì)象的所有屬性設(shè)置。
第6行代啟動(dòng)錯(cuò)誤處理程序,如果第7行代碼發(fā)生錯(cuò)誤則執(zhí)行line行后面的代碼。
第7行代碼使用Set語(yǔ)句將Workbook對(duì)象引用賦給變量Wb,如果“Excel Home.xls”工作簿沒有被打開將發(fā)生下標(biāo)越界錯(cuò)誤,此時(shí)執(zhí)行第12、13行代碼,否則執(zhí)行第8、9行代碼。
聯(lián)系客服