正文開(kāi)始前,先插播一條廣告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行代碼聲明變量類(lèi)型。 第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”工作簿,新建工作簿格式。 注意本例中沒(méi)有考慮工作簿同名因素,如果目錄中已有“存貨明細(xì).xls”工作簿,運(yùn)行時(shí)會(huì)顯示對(duì)話框,選擇“是”即可,否則將會(huì)出錯(cuò)。
▲042 打開(kāi)指定的工作簿 VBA中使用Open方法打開(kāi)一個(gè)工作簿,如下面的代碼所示。 Sub Openfile() Dimx As Integer Forx = 1 To Workbooks.Count If Workbooks(x).Name = '123.xls'Then MsgBox ““'123”“工作簿已經(jīng)打開(kāi)!' Exit Sub End If Next Workbooks.OpenThisWorkbook.Path & '\123.xls' End Sub 代碼解析: Openfile過(guò)程打開(kāi)同一目錄中的“123”工作簿。 第3行代碼利用Workbook對(duì)象的Count屬性取得打開(kāi)工作簿的數(shù)目,使用For...Next 語(yǔ)句遍歷所有打開(kāi)的工作簿。遍歷工作簿除了使用For...Next 語(yǔ)句外還可以使用For...Each...Next語(yǔ)句來(lái)遍歷Workbook對(duì)象集合中的所有元素,請(qǐng)參閱▲46-1。 第4行到第8行代碼遍歷所有打開(kāi)的工作簿,如果Workbook對(duì)象集合中存在“123”工作簿,說(shuō)明“123”工作簿已打開(kāi)。 第9行代碼如果“123”工作簿沒(méi)有被打開(kāi)則使用Open方法打開(kāi)“123”工作簿。 Open方法應(yīng)用于Workbooks 對(duì)象時(shí)打開(kāi)一個(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是必需的,要打開(kāi)的工作簿的文件名。 參數(shù)UpdateLinks是可選的,指定文件中鏈接的更新方式。如果省略本參數(shù),則提示用戶選擇鏈接的更新方式。否則,該參數(shù)的取值應(yīng)為表格中的某個(gè)值。 參數(shù)ReadOnly是可選的,如果該值為True,則以只讀模式打開(kāi)工作簿。 參數(shù)Format是可選的,如果MicrosoftExcel正在打開(kāi)一個(gè)文本文件,則該參數(shù)用于指定分隔字符,如表格所示。如果省略本參數(shù),則使用當(dāng)前的分隔符。 參數(shù)Password是可選的,該字符串指定打開(kāi)一個(gè)受保護(hù)工作簿的密碼。如果省略該參數(shù)并且指定工作簿已設(shè)置密碼,則提示用戶輸入密碼。 參數(shù)WriteResPassword是可選的,該字符串為一個(gè)寫(xiě)保護(hù)工作簿的寫(xiě)入權(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í)可打開(kāi)該加載宏以便在窗口中看到。如果該參數(shù)的值為False或者省略該參數(shù),則該加載宏以隱藏方式打開(kāi),并且無(wú)法設(shè)為可見(jiàn)。 參數(shù)Notify是可選的,當(dāng)該文件不能以可讀寫(xiě)模式打開(kāi)時(shí),如果該參數(shù)的值為True,則可將該文件添加到文件通知列表。 參數(shù)Converter是可選的,打開(kāi)文件時(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 判斷指定工作簿是否打開(kāi) 043-1 遍歷Workbooks集合方法 通過(guò)遍歷當(dāng)前應(yīng)用程序所有已打開(kāi)的工作簿文件(Workbooks集合),判斷指定名稱(chēng)的工作簿是否打開(kāi),如下面的代碼所示。 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)被打開(kāi)!' Exit Sub End If Next MsgBox'工作簿' & myWb & '沒(méi)有被打開(kāi)!' End Sub 代碼解析: WorkbookIsOpen_1過(guò)程通過(guò)遍歷當(dāng)前應(yīng)用程序中所有已打開(kāi)的工作簿文件(Workbooks集合),判斷“Excel Home”工作簿是否打開(kāi)。 第5行代碼使用For...Each...Next語(yǔ)句來(lái)遍歷Workbook對(duì)象集合中的所有元素。 第6行到第8行代碼如果Workbook對(duì)象集合包含“Excel Home.xls”工作簿名稱(chēng),說(shuō)明文件已打開(kāi),使用Exit Sub語(yǔ)句結(jié)束代碼的運(yùn)行。 第11行代碼如果運(yùn)行到此行代碼說(shuō)明“Excel Home.xls”工作簿沒(méi)有被打開(kāi)。 043-2 錯(cuò)誤處理方法 使用錯(cuò)誤處理程序判斷指定名稱(chēng)的工作簿是否打開(kāi),如下面的代碼所示。 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)被打開(kāi)!' SetWb = Nothing ExitSub line: MsgBox'工作簿' & myWb & '沒(méi)有被打開(kāi)!' SetWb = Nothing End Sub 代碼解析: WorkbookIsOpen_2過(guò)程使用錯(cuò)誤處理程序判斷“Excel Home”工作簿是否打開(kāi)。 第5行代碼使用Clear方法清除Err對(duì)象的所有屬性設(shè)置。 第6行代啟動(dòng)錯(cuò)誤處理程序,如果第7行代碼發(fā)生錯(cuò)誤則執(zhí)行line行后面的代碼。 第7行代碼使用Set語(yǔ)句將Workbook對(duì)象引用賦給變量Wb,如果“Excel Home.xls”工作簿沒(méi)有被打開(kāi)將發(fā)生下標(biāo)越界錯(cuò)誤,此時(shí)執(zhí)行第12、13行代碼,否則執(zhí)行第8、9行代碼。 |
|
來(lái)自: wdmexcel > 《Excel Vba》