編程專題講座-excel vba開發(fā)技術(shù)第4章基礎(chǔ)_第1頁(yè)
編程專題講座-excel vba開發(fā)技術(shù)第4章基礎(chǔ)_第2頁(yè)
編程專題講座-excel vba開發(fā)技術(shù)第4章基礎(chǔ)_第3頁(yè)
編程專題講座-excel vba開發(fā)技術(shù)第4章基礎(chǔ)_第4頁(yè)
編程專題講座-excel vba開發(fā)技術(shù)第4章基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩18頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

4VBAVBAVBAVBA數(shù)VBA編程打下基VBAExcel中使VBA編程,可以開發(fā)出許多有價(jià)值的應(yīng)用程序。作為初學(xué)者,首先需要了解什么是VBA,以及用VBA能做什么。VBAVisualBasicforApplication的縮寫,是一種應(yīng)用程序自動(dòng)化語言。所謂應(yīng)用程序自動(dòng)化,是指通過編寫程序讓常規(guī)應(yīng)用程序(Excel、Word等)自動(dòng)完成工作,如在Excel里自動(dòng)設(shè)置單元格的格式、多張工作表之間的自動(dòng)計(jì)算等。VBA是微軟應(yīng)用程序開發(fā)語言——VB的子集。所以如果有VB程序設(shè)計(jì)的經(jīng)驗(yàn),學(xué)VBA根據(jù)其嵌入軟件的不同,增加了對(duì)相應(yīng)軟件中對(duì)象的控制功能。例如Excel的ExcelVBAExcelExcelExcel的自動(dòng)化水平??梢杂煤芏痰臅r(shí)間在Excel環(huán)境中開發(fā)出一套完整的管理信息系統(tǒng)。Excel中使用VBA當(dāng)使用Excel為,利用Excel現(xiàn)有的功能(如文件管理、函數(shù)等),可以減少件給用戶即可完成文件的發(fā)布。VBAExcelVBAExcel應(yīng)用程序都由一個(gè)工程表示,每個(gè)工程包含當(dāng)前工作簿VBA代碼,本節(jié)介紹VBA代碼最基礎(chǔ)的內(nèi)容。在本書第2章中錄制的宏都是由VBA代碼構(gòu)成的,進(jìn)入VBE環(huán)境可以看到錄制的宏代碼。在Excel中錄制的宏都是以VBA代碼表示,所有的宏都是以Sub開始,以關(guān)鍵詞EndSub結(jié)束。其結(jié)構(gòu)如下:'說明VBAVBA在Sub之后是宏的名稱,宏名稱后是一對(duì)括號(hào)。在Sub和EndSub之間是每次Sub設(shè)置表頭格式()'快捷鍵:Ctrl+tActiveWindow.WindowState=Sub設(shè)置表頭格式()'快捷鍵:Ctrl+tActiveWindow.WindowState=xlNormalWithSelection.HorizontalAlignment=.VerticalAlignment=.WrapText=.Orientation=.AddIndent=.IndentLevel=.ShrinkToFit=.ReadingOrder=.MergeCells=FalseEndWithWith.Name.Name宋體.Size=.Strikethrough=.Superscript=.Subscript=.OutlineFont=.Shadow=.Underline=.ColorIndex=.TintAndShade=.ThemeFont=xlThemeFontNoneEndWithSelection.Font.Bold=TrueActiveWindow.WindowState=xlNormalEnd有一些固定的單詞(稱為關(guān)鍵字)經(jīng)常出現(xiàn),例如,Selection、With幾乎每行代碼中都包括句點(diǎn),用來連接VBA語言中不同的要素。例如,VBA中具有特殊含義的字符,如+、–、*、/、>、<、=和各種標(biāo)點(diǎn)綜上所述,在VBA代碼中可使用各種常見的符號(hào)。VBA中具有特殊意義的保留字或符號(hào)。這些關(guān)鍵字具多種類型。常用的關(guān)鍵字如表4-1所示。4-1VBA提示:VBA中,對(duì)關(guān)鍵字不區(qū)分大小寫,無論用戶是按大寫、小寫或大小寫混合的Enter鍵后,VBE將自動(dòng)將關(guān)鍵字轉(zhuǎn)換為VBA程序中,為了區(qū)分過程、常數(shù)、變量、對(duì)象等,需要為這些過程、常數(shù)、變不能在標(biāo)識(shí)符中使用空格、句點(diǎn)(.)、感嘆號(hào)(!)或@、&、$,#整型整型數(shù)據(jù)為16位(2個(gè)字節(jié))的數(shù)值形式,其范圍為–32768~32767之間。整型DimDimn1AsIntegerDimn%長(zhǎng)整型長(zhǎng)整型數(shù)據(jù)為32位(4個(gè)字節(jié))有符號(hào)的數(shù)值形式,其范圍從 。Long的類型字符為和號(hào)(&)單精度浮點(diǎn)型的范圍在負(fù)數(shù)的時(shí)候是從–3.402823E38~–1.401298E-45,而在正數(shù)的時(shí)候是從1.401298E-45~3.402823E38。單精度浮點(diǎn)型的類型字符為感嘆號(hào)(!)雙精度浮點(diǎn)型貨幣型為64位(8個(gè))10000154位數(shù)字。這種表示法的范圍可以從–9223372654775808~22337208477.5807。貨幣型為at符()。字節(jié)型字符串"Microsfot"MicrosfotVisualBasic""歡迎使用VBA"Dimstr1AsStringDimDimstr1AsStringDimstr2AsString*10定義后將一直占用10個(gè)字符位置。型型數(shù)據(jù)很簡(jiǎn)單,只有兩個(gè)值(True或False。該類型適合簡(jiǎn)單的二元信息例如,真/假、是/為True或Fals為16位(2轉(zhuǎn)換Boolean值為其他的數(shù)據(jù)類型時(shí),F(xiàn)alse成為0,而True成為–1。日期型11999912310:00:0023:59:59#1Jan93#日期型變量會(huì)根據(jù)計(jì)算機(jī)中的短日期格式來顯示。時(shí)間則根據(jù)計(jì)算機(jī)的時(shí)間格式值則表示時(shí)間。午夜為00.5。負(fù)整數(shù)表示18991230日之前的日期。對(duì)象型VBA是面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,用戶可在程序中各種對(duì)象,例如,Excel的工作表、單元格等。這些對(duì)象有自己特定的對(duì)象名,這里所說的對(duì)象型可任何對(duì)象。必須使用Set語句給對(duì)象變量賦值,對(duì)象變量使用結(jié)束后,應(yīng)為其賦值為Nothing。如:DimMyObjectAsSetMyObject=Worksheets("sheet1")SetMyObject=Nothing

'賦值對(duì) 變體型變體型是VBA中的一種特殊數(shù)據(jù)類型,所有沒有被數(shù)據(jù)類型的變量都默認(rèn)為變體型。變體型數(shù)據(jù)是所有沒被顯式(用如Dim、Private、Public或Static等語句——變量的將在本章后面進(jìn)行介紹為其他類型變量的數(shù)據(jù)類型。變體型沒有類型字符。String數(shù)據(jù)及用戶定義類型外,可以包含任何種類的數(shù)據(jù)。Variant也可以包含EmptyErrorNothingNull等特殊值。可VarType函數(shù)或TypeName函數(shù)來決定如何處理變體型中的數(shù)據(jù)。As數(shù)據(jù)類型AsEndTypeTypeProductNameAsStringtyAsIntegerPriceAsCurrencyOrderAsIntegerEnd便地處理Excel工作表中的數(shù)據(jù)。使用Type語句了一個(gè)用戶自定義類型后,就可以在該范圍內(nèi)的任何位置聲注意:自定義數(shù)據(jù)類型的定義必須放在模塊(模塊和類模塊)的部分。在使用記錄Type語句進(jìn)行定義。一般情況下,記錄類型在模塊中定義,其變量可以出現(xiàn)在VBA工程的任何地方。4-1所示的工作表中每行數(shù)據(jù)產(chǎn)品名稱、庫(kù)存量、單價(jià)、訂購(gòu)量等數(shù)據(jù)。在VBA程序中為了方便地處理這些數(shù)據(jù),可自定義數(shù)據(jù)類型Product,然后在程序中使用4-1TypeTypeProductNameAsString tyAsInteger PriceAs OrderAsInteger EndTypeSubDimp1AsWithWorksheets("商品")p1.ProductNameCells(32)p1.Price=.Cells(3,6) ty=.Cells(3,7)p1.Order=.Cells(3,8)EndEnd4-2xlHAlign 值 –7–51–––PublicPublic|PrivateEnum類型名稱成員[=常數(shù)表達(dá)式]常數(shù)表達(dá)式EndPublicPublicEnumEnd1,“六年級(jí)”表示常數(shù)6。PublicPublicEnum一年級(jí)EndGrade枚舉類型后,即可在代碼窗口中使用該類型,在定義為變量時(shí)將Grade4-2所示。給枚舉類型變量賦值時(shí),在代碼窗口中將自動(dòng)列出枚舉類型的成員,如圖4-3所示。圖4-2定義枚舉變 圖4-3使用枚舉 3.14、255等僅表示它自身取值的數(shù)據(jù)叫常數(shù)。常數(shù)的值在程序執(zhí)行之前就已經(jīng)確定,執(zhí)行VBA程序中可以直接使用的量。根據(jù)表示的數(shù)據(jù)類型不同,直接常時(shí)間常數(shù)和常數(shù)等多種類型。 "ExcelVBA從入門到精通 注意:字符串常數(shù)必須引號(hào)括起來,否則 會(huì)將其認(rèn)為是一個(gè)變量名體的意義。例如,#8/8/2008#是正確的,而#4/31/2008#是錯(cuò)誤的,因?yàn)?月沒有31日。輸入日期時(shí),VBE自動(dòng)將其兩個(gè)“#VBE的代碼中輸入以下內(nèi)容VBE都會(huì)自動(dòng)將其按“月/日/年”的格式轉(zhuǎn)換為正確的表示形式,顯示如 Windows操作系統(tǒng)中的設(shè)置相關(guān)。例如,#8/13/08#可能表示2008813日。

4-4 有確定的值。VBA中可使用Const關(guān)鍵字定義符號(hào)常數(shù),其語法格式如下:Const常數(shù)標(biāo)識(shí)符As數(shù)據(jù)類型=符號(hào)常數(shù)表達(dá) 其中,Const為定義符號(hào)常數(shù)的關(guān)鍵字,符號(hào)常數(shù)表達(dá)式計(jì)算出來的值保存在常數(shù)名中,如果在常數(shù)時(shí)沒有顯式地使用Astype子句,則該常數(shù)的數(shù)據(jù)類型是最適合其表ConstConstMAXCOL=ConstMyIntAsInteger=ConstBOOKNAMEExcelVBA從入門到精通ConstBOOK= Office"+BOOKNAME 以上代碼使用前面定義的 BOOKExcel中的各對(duì)象,ExcelVBA預(yù)定義了許多常數(shù),這些常數(shù)稱為系統(tǒng)常數(shù)。提供對(duì)象庫(kù)的其他應(yīng)用程序(Access、Excel、ProjectWord等)也提供常數(shù)列表,VBA中,系統(tǒng)常數(shù)名采用大小寫混合的格式,其前綴表示定義常數(shù)的對(duì)象庫(kù)名。Excel中的系統(tǒng)常數(shù)名通常都是以小寫的xl(xlWindowType的成員包括xlWorkbook等幾個(gè))作為前綴,而VB中的系統(tǒng)常數(shù)名通常都是以小寫的vb作為前綴。提供了很多Msgbox常數(shù),用vbOKOnly表示框只有【確定】按鈕,比用數(shù)值0更直“常數(shù)”的所有幫助條目,如圖4-5所示。在查找到的信息中單擊【VisualBasic常數(shù)】按鈕,可顯示VBA常數(shù)的分類,如圖4-6左圖所示。單擊分類【Color常數(shù)】按鈕即可查看具體的常數(shù),如圖4-6右圖4-54-6常數(shù),單擊【搜索】按鈕,將顯示Msgbox的相關(guān)常數(shù),如圖4-7所示。4-7 變量就是事先將變量名及其類型在使用之前通知VBA,由VBA按照變量的數(shù)據(jù)類型分配空間??墒褂肈im、Static、Private或Public關(guān)鍵字來變量。最常用的是使用Dim變量,其語法格式如下:Dim變量名[As數(shù)據(jù)類型 Dim和As為變量的關(guān)鍵字?jǐn)?shù)據(jù)類型為前面介紹的類型關(guān)鍵字,例如,String、Date型包含進(jìn)來。在下面的語句中,變量intX、intY與intZ被為Integer類型。DimintXAsInteger,intYAsInteger,intZAs 用隱式變量時(shí),VBAVariant類型。在為其指定值之前,其值Empty;當(dāng)為它賦值后,會(huì)采用所賦值的類型作為變量的類型。Option VBA應(yīng)用程序中,將使用很多的變量,有些變量可在整個(gè)應(yīng)用程序中使用,而另值自動(dòng)。這類變量用Dim關(guān)鍵字進(jìn)行定義。ExcelVBA的某個(gè)模塊頂端定義的變量,在該模塊的各過程中都可模塊級(jí)別變量。這類變量在模塊的開始部分使用Dim或Private關(guān)鍵字進(jìn)行定義。用的變量。這類變量在模塊的開始部分用Public關(guān)鍵字進(jìn)行定義。在過程中使用Static關(guān)鍵字的變量稱為靜態(tài)變量,這類變量在整個(gè)應(yīng)用程序中有碼創(chuàng)建了變量strName并且指定為String數(shù)據(jù)類型。DimstrNameAs Dims1AsStrings1測(cè)試局部變量"MsgBoxs1EndEndSub上面的代碼定義了兩個(gè)過程“過程1”和“過程2”,其中“過程1”中定義了一個(gè)局部s1MsgBox4-82”中直接使用MsgBox顯示s1中的值,因?yàn)樵撨^程中并未定義變量s1的值,所以顯示框中無任何信息,如圖4-8右圖所示。4-8程。在模塊級(jí)別中使用Dim語句與使用Private語句是相同的。不過使用Private語句可以更容易地和解釋代碼。使用兩個(gè)語句變量的語法格式完全相同。在模塊的【】部分,輸入變量的代碼,如圖4-9所示PrivatestrNameAs 圖4-9模塊變SubSub測(cè)試模塊變量()strName=" MsgBox軟件設(shè)計(jì):&strNameEndSubSub顯示模塊變量的值End注意:模塊變量的初始化操作必須在過程中進(jìn)行,不能在模塊【】部分進(jìn)行strNameMsgBoxstrName的值。接著運(yùn)行過程“顯示模塊變量的值”,在該過程中未對(duì)模塊strNamestrName為模塊變量,在“測(cè)試模塊變量”過程中已經(jīng)賦值,所如果首先運(yùn)行過程“顯示模塊變量的值”,MsgBox框?qū)⒉粫?huì)顯示任何值使用Public語句公共模塊級(jí)別變量。全局變量可用于工程中的任何過程。如果全局變量是于標(biāo)準(zhǔn)模塊或是類模塊中,則它也可以被任何到此全局變量所屬工程的注意:一般情況下,要盡量少使用全局變量。過多地使用全局變量,可能會(huì)。在VBE中雙擊模塊“變量作用域”,在模塊的部分使用以下代碼全局PublicstrAppNameAs SubSub初始化全局變量strAppNameExcel測(cè)試應(yīng)用程序"MsgBoxstrAppNameEndSub顯示全局變量的值()Sub顯示全局變量的值()End圖4- 全局變 圖4-11在其他模塊中全局變靜態(tài)變量的方法是,在過程內(nèi)部用Static關(guān)鍵字一個(gè)或多個(gè)變量,其用法Dim語句完全一樣,例如StaticintCountAs SubSub靜態(tài)變量測(cè)試Dimi1AsIntegerStatici2AsIntegeri1=i1+1i2=i2+MsgBox局部變量的值:&i1&vbNewLine&_"靜態(tài)變量的值:"&i2,vbOKOnlyEndSub測(cè)試Fori=1To5EndSub4-12左圖所示的結(jié)果,由圖可看出局部變量和靜態(tài)變量的值都為1。單擊【確定】按鈕將再次顯示類似的框,單擊多次【確定】4-12在“靜態(tài)變量測(cè)試”過程中將變量i1為局部變量,該過程

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論