版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
VBA基礎(chǔ)(07-Feb-23)數(shù)組VBA程序流程控制VBA常用語(yǔ)句VBA編程基礎(chǔ)VBA概念VBA概念1-1VBA簡(jiǎn)介VBA(VisualBasicforApplication)是MicrosoftOffice系列軟件的內(nèi)置編程語(yǔ)言,其語(yǔ)法結(jié)構(gòu)與VisualBasic編程語(yǔ)言互相兼容,采用的是面向?qū)ο蟮木幊虣C(jī)制和可視化的編程環(huán)境。1-2面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念1.集合和對(duì)象
VBA中的應(yīng)用程序是由許多對(duì)象組成的,如表、窗體、查詢等。對(duì)象是幫助構(gòu)造應(yīng)用程序的元素,以特定的方式組織這些對(duì)象,就形成了應(yīng)用程序。2.對(duì)象的屬性、事件和方法屬性屬性描述了對(duì)象的自身性質(zhì)其格式為:
對(duì)象名.屬性=屬性值1-2面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念事件事件是指可以發(fā)生在一個(gè)對(duì)象上且能夠被該對(duì)象所識(shí)別的動(dòng)作。如:?jiǎn)螕裟硞€(gè)命令按鈕就產(chǎn)生該按鈕的“單擊”事件當(dāng)某個(gè)對(duì)象發(fā)生某一事件后,就會(huì)驅(qū)動(dòng)系統(tǒng)去執(zhí)行預(yù)先編好的、與這一事件相對(duì)應(yīng)的一段程序。方法
方法是系統(tǒng)事先設(shè)計(jì)好的,可以完成一定操作的特殊過(guò)程,是附屬于對(duì)象的行為和動(dòng)作。在需要使用的時(shí)候可以直接調(diào)用。其格式為: 對(duì)象名.方法名常見對(duì)象及其含義對(duì)象名含義Application代表整個(gè)Excel應(yīng)用程序Window代表窗口Worksheet代表一個(gè)工作表Sheets指定的或活動(dòng)工作薄中所有工作表的集合ShapeRange代表形狀區(qū)域,它是文檔中的一組形狀PivotTable代表工作表上的數(shù)據(jù)透視圖Workbook代表一個(gè)Excel工作薄Shape代表繪圖層中的對(duì)象,例如自選圖形Range代表某一單元格、某一行、某一列、某一區(qū)域Name代表單元格區(qū)域的自定義名Chart代表工作薄中的圖表FileDialog提示文件對(duì)話框,功能和應(yīng)用程序中標(biāo)準(zhǔn)“打開”和“保存”對(duì)話框類似CommandBarPopup代表命令欄上的一個(gè)彈出式控件CommandBar代表容器應(yīng)用程序中的一個(gè)命令欄1-3VBA編程環(huán)境VBA中的程序與函數(shù)共有4種:一般程序(Sub)、事件程序(Event)、屬性程序(Property)和函數(shù)(Function)VBA程序窗口共6種:
代碼窗口、立即窗口、本地窗口、監(jiān)視窗口、工程資源管理器和屬性窗口在VBE環(huán)境中編寫VBA代碼工程窗口-選擇對(duì)象屬性窗口-選擇對(duì)象的屬性代碼窗口選擇事件VBE編程環(huán)境標(biāo)準(zhǔn)工具條視圖MicrosoftExcel按鈕:切換Excel窗口插入按鈕:插入模塊或過(guò)程運(yùn)行子過(guò)程/用戶窗體按鈕:運(yùn)行模塊中的程序中斷按鈕:中斷正在運(yùn)行的程序重新設(shè)置按鈕:結(jié)束正在運(yùn)行的程序設(shè)置模式按鈕:在設(shè)計(jì)模式和非設(shè)計(jì)模式之間切換工程資源管理器按鈕:用于打開工程資源管理器屬性窗口按鈕:用于打開屬性窗口對(duì)象瀏覽器按鈕:用于打開對(duì)象瀏覽器Microsoft
Excel插入模塊運(yùn)行子過(guò)程/用戶窗體設(shè)計(jì)模式中斷重新設(shè)計(jì)工程資源管理器對(duì)象瀏覽器屬性窗口新建一個(gè)窗體并添加兩個(gè)命令按鈕,運(yùn)行窗體后,單擊第一個(gè)按鈕,顯示一個(gè)消息框;單擊第二個(gè)按鈕,退出當(dāng)前窗體
通過(guò)此例,體會(huì)可視化編程、面向?qū)ο?、事件過(guò)程、應(yīng)用方法等基本概念。數(shù)組VBA程序流程控制VBA常用語(yǔ)句VBA編程基礎(chǔ)VBA概念VBA編程基礎(chǔ)2-1常量、變量VBA使用常量、變量來(lái)存儲(chǔ)值。用來(lái)保存在程序運(yùn)行期間數(shù)據(jù)。常量:在程序運(yùn)行中其存儲(chǔ)的值不會(huì)改變。變量:在程序運(yùn)行中其值可以改變。2-1-1常量在程序運(yùn)行過(guò)程中,其值不會(huì)被改變的量稱為常量。在VBA中有三類常量:1.直接常量如:10,20%,123.0,“AB”,“VBA程序設(shè)計(jì)”等2.符號(hào)常量3.系統(tǒng)常量指VBA系統(tǒng)預(yù)先定義好的,用戶可以直接引用的量。如:acForm,acQuery,vbOk,vbRed符號(hào)常量在程序中,某個(gè)常量多次被使用,則可以使用一個(gè)符號(hào)來(lái)代替該常量,這樣不僅在書寫上方便,而且有效地改進(jìn)了程序的可讀性和可維護(hù)性。VBA中使用關(guān)鍵字Const
聲明符號(hào)常量。其格式如下:
Const常量名[類型符號(hào)]=常數(shù)表達(dá)式如:
ConstPI#=3.14159262-1-2變量變量是內(nèi)存中的臨時(shí)單元,存放在程序執(zhí)行過(guò)程中產(chǎn)生的中間結(jié)果和最后輸出結(jié)果。在程序中使用變量,就要給變量定義名稱及類型,即對(duì)變量進(jìn)行聲明。變量命名規(guī)則1.變量名必須以字母或漢字開頭,后可跟字母、漢字、數(shù)字或下劃線組成(不能含有小數(shù)點(diǎn)和空格),長(zhǎng)度不超過(guò)255個(gè)字符的字符串;2.不能使用VBA中的關(guān)鍵字;3.VBA中不區(qū)分變量名的大小寫;4.變量名的最后一個(gè)字符可以是%、&、!、#、$等表示數(shù)據(jù)類型的聲明符。說(shuō)明:常量名的命名規(guī)則與變量名的命名規(guī)則相同2-2數(shù)據(jù)類型與變量的聲明在VBA中,數(shù)據(jù)類型用來(lái)決定變量可以保存何種數(shù)據(jù)。VBA支持多種數(shù)據(jù)類型,為用戶編程提供了方便。2-2-1VBA的數(shù)據(jù)類型數(shù)據(jù)類型類型聲明符存儲(chǔ)空間取值范圍整型(Integer)%2-32768~32767長(zhǎng)整型(Long)&4-2147483648~2147483647單精度浮點(diǎn)型(Single)!4負(fù)數(shù):-3.402823E38~-1.401298E-45正數(shù):1.401298E-45~3.402823E38雙精度浮點(diǎn)型(Double)#8負(fù)數(shù):-1.79769313486232E308~-4.94065645841247E-324正數(shù):4.94065645841247E-324~1.79769313486232E308貨幣型(Currency)@8-922337203685477.5808~922337203685477.5807日期型(Date)8100年1月1日~9999年12月31日字符型(String)$0字符~65400個(gè)字符字節(jié)型(Byte)10~255邏輯型(Boolean)2True或False對(duì)象型(Object)4任何引用的對(duì)象變體型(Variant)2-2-2變量聲明用Dim或Static語(yǔ)句顯式聲明局部變量格式:Dim變量名[AS類型]或Dim變量名類型符語(yǔ)句中的“As類型”子句是可選的。如果使用該子句,就可以定義變量的數(shù)據(jù)類型。未使用,默認(rèn)變量的類型為變體型(Variant)。例如:DimiAsinteger,s表示聲明了一個(gè)名為i的整型變量和一個(gè)名為s的變體型變量。關(guān)鍵字Dim或Static的區(qū)別Dim聲明:隨過(guò)程的調(diào)用而分配存貯單元,每次調(diào)用都對(duì)變量初始化;過(guò)程體結(jié)束,變量的內(nèi)容自動(dòng)消失,存儲(chǔ)單元釋放。Static聲明:Static聲明的變量,也稱為靜態(tài)變量。靜態(tài)變量在程序運(yùn)行過(guò)程中一直保留其值,即每次調(diào)用過(guò)程,變量保持原來(lái)的值。數(shù)據(jù)類型的轉(zhuǎn)換函數(shù)列表函數(shù)返回類型CByteByteCBoolBooleanCIntIntegerCLngLong(長(zhǎng)整型)CSngSingle(單精度浮點(diǎn)型)CDblDouble(雙精度浮點(diǎn)型)CCurCurrency(變比整數(shù))CDecDecimalCDateDateCStrStringCvarVariant識(shí)別數(shù)據(jù)類型的函數(shù)TypeNameSubabc()DimiAsIntegerDimstrAsStringi=10MsgBoxTypeName(i)str=CStr(i)MsgBoxTypeName(str)EndSub隱式聲明變量未進(jìn)行上述的聲明而直接使用變量,稱變量的隱式聲明,采用隱式聲明的變量都是變體型(Variant)。
注意:
VBA中允許不事先聲明而直接使用變量,可以通過(guò)語(yǔ)句OptionExplicit,來(lái)要求所使用的變量必須事先聲明,否則VBA會(huì)發(fā)出警告信息。變量a,b,Sum都沒(méi)有事先定義PrivateSubForm_Click()Sum=0a=10b=20Sum=a+bDebug.Print"Sum="&SumEndSub良好的編程習(xí)慣應(yīng)該是“先聲明變量,后使用變量”,這樣做可以提高程序的效率,同時(shí)也使程序易于調(diào)試。VBA中可以強(qiáng)制顯式聲明,可以在窗體模塊、標(biāo)準(zhǔn)模塊和類模塊的通用聲明段中加入語(yǔ)句:OptionExplicit變量的初始化聲明而未賦值的變量的值為:數(shù)值型變量初始化為0;字符型變量為零長(zhǎng)度字符串;變體型變量初始化為Empty;2-3-1算術(shù)運(yùn)算符2-3-2連接運(yùn)算符連接運(yùn)算符:&、+(字符串連接)例如:"123"+"456"結(jié)果"123456""123"&"456"結(jié)果"123456"
使用上&與+的區(qū)別:例如:"abcdef"&12345結(jié)果為"abcdef12345" "123"&456結(jié)果為"123456" "abcdef"+12345結(jié)果為出錯(cuò)"123"+456結(jié)果為579
2-3-3關(guān)系運(yùn)算符將兩個(gè)操作數(shù)進(jìn)行大小比較,結(jié)果為邏輯值。注意:字符串比較,則按字符的ASCII碼值從左到右一一比較,直到出現(xiàn)不同的字符為止。2-3-4邏輯運(yùn)算符將操作數(shù)進(jìn)行邏輯運(yùn)算,結(jié)果是邏輯值舉例例1:用人單位招聘秘書:年齡小于40歲的女性,學(xué)歷??苹虮究普_的VBA表達(dá)式:3〈=xAndx<=7錯(cuò)誤的VBA表達(dá)式:3<=x<=7或3<=xOrx<=7
年齡<40,性別=“女”,(學(xué)歷=“專科”,學(xué)歷=“本科”)
AndAndOr例2:算術(shù)表達(dá)式:2-3-5簡(jiǎn)單的字符處理函數(shù)作用關(guān)鍵字OptionCompare設(shè)置字符串比較規(guī)則StrComp比較兩個(gè)字符串StrConv字符串類型轉(zhuǎn)換Lcase、Ucase大小寫變換Space、String重復(fù)字符串Len計(jì)算字符串長(zhǎng)度Format設(shè)置字符格式Lset、Rset重排字符串InStr、Left、Ltrim、Mid、RightRtrim、Trim處理字符串Split、Join拆分與連接字符串OptionCompare設(shè)置字符串比較規(guī)則OptionCompare{Binary|Text|Database}OptionCompareBinary:是根據(jù)字符的內(nèi)部二進(jìn)制表示導(dǎo)出的一種排序A-Z<a-z<漢字OptionCompareText:是根據(jù)系統(tǒng)區(qū)域確定的一種不區(qū)分大小寫的一種排序(A=a)<(B=b)<(Z=z)結(jié)果:True結(jié)果:FalseStrComp比較兩個(gè)字符串StrConv字符串類型轉(zhuǎn)換常量說(shuō)明vbUpperCase將字符串文字轉(zhuǎn)成大寫vbLowerCase將字符串文字轉(zhuǎn)成小寫vbProperCase將字符串中每個(gè)字的開頭字母轉(zhuǎn)成大寫vbWide將字符串中單字節(jié)字符轉(zhuǎn)成雙字節(jié)字符vbNarro將字符串中雙字節(jié)字符轉(zhuǎn)成單字節(jié)字符vbKatakana將字符串中平假名字符轉(zhuǎn)成片假名字符vbHiragana將字符串中片假名字符轉(zhuǎn)成平假名字符vbUnicode根據(jù)系統(tǒng)的默認(rèn)碼頁(yè)將字符串轉(zhuǎn)成UnicodevbFromUnicode將字符串由Unicode轉(zhuǎn)成系統(tǒng)的默認(rèn)碼頁(yè)StrConv字符串類型轉(zhuǎn)換(例)MsgBoxstrConv("English",vbUpperCase)&Chr(10)&strConv("English",vbLowerCase)&Chr(10)&strConv("english",vbProperCase)&Chr(10)&strConv("English",vbWide)Format格式化字符串MsgBoxFORMAT(Date,"yyyy年m月d日")&Chr(10)&FORMAT(Date,"aaaa"),vbaOKOnly,"現(xiàn)在是"LCase/UCase大小寫轉(zhuǎn)換Sub大小寫轉(zhuǎn)換()MsgBoxLCase("HELLOWORLD")&Chr(10)&UCase("helloworld")EndSubString/Space重復(fù)字符Sub重復(fù)字符()MsgBoxString(5,"$")&Space(3)&String(5,"*")EndSubLset/Rset字符串往左/右對(duì)齊Sub字符左右對(duì)齊()Dimstr1,str2AsStringstr1="大連華信計(jì)算機(jī)技術(shù)股份有限公司"LSetstr1="華信培訓(xùn)"str2="大連華信計(jì)算機(jī)技術(shù)股份有限公司"RSetstr2="華信培訓(xùn)"MsgBox"["&str1&"]"&Chr(10)&"["&str2&"]"EndSubInstr返回字符出現(xiàn)位置Sub查找位置()MsgBoxInStr("大連華信計(jì)算機(jī)技術(shù)股份有限公司","信")EndSubLeft/Mid/Right從左、中、右取值Sub取值()DimstrAsStringstr="大連華信計(jì)算機(jī)技術(shù)股份有限公司"MsgBoxLeft(str,2)&Mid(str,3,2)&Right(str,2)EndSubLTrim/RTrim/Trim去除空格Subabc()Dimstr1,str2AsStringstr1="大連"str2="華信"'MsgBoxTrim(str1&str2)&"666"MsgBoxLTrim(str1)&RTrim(str2)&"666"EndSubLike字符串相似度比較Subabc()'result=stringlikpattern'?任何單一字符'*零個(gè)或多個(gè)字符'#任何一個(gè)數(shù)字(0-9)Dimstr1AsStringstr1="abda"Ifstr1Like"*"ThenMsgBox"*相似"Ifstr1Like"a???"ThenMsgBox"?相似"If1234Like"####"ThenMsgBox"#相似"EndSub2-4表達(dá)式組成由變量、常量、函數(shù)等運(yùn)算對(duì)象加上運(yùn)算符、圓括號(hào)組成的式子。書寫規(guī)則
(1)運(yùn)算符不能相鄰。例a+-b是錯(cuò)誤的。
(2)乘號(hào)不能省略。例x乘以y應(yīng)寫成:x*y。
(3)括號(hào)必須成對(duì)出現(xiàn),均使用圓括號(hào)。
(4)表達(dá)式從左到右在同一基準(zhǔn)上書寫,無(wú)高低。運(yùn)算優(yōu)先級(jí)算術(shù)運(yùn)算符>連接運(yùn)算符>關(guān)系運(yùn)算符>邏輯運(yùn)算2-5常用函數(shù)函數(shù)實(shí)際上是系統(tǒng)事先定義好的內(nèi)部程序,用來(lái)完成特定的功能。VBA提供了大量的內(nèi)部函數(shù),供用戶在編程時(shí)使用。
函數(shù)的調(diào)用形式為:函數(shù)名(參數(shù)表)常用內(nèi)部函數(shù) 常用內(nèi)部函數(shù),在立即窗口練習(xí),體會(huì)函數(shù)的功能。[請(qǐng)參照:VBA函數(shù)參考手冊(cè)]2-6模塊、函數(shù)和過(guò)程
模塊是自定義的過(guò)程、函數(shù)保存的地方,也是錄制的宏保存的場(chǎng)所。有兩種基本類型的模塊:類模塊和標(biāo)準(zhǔn)模塊。模塊可以通過(guò)右鍵單擊工程資源管理器的工程名,選擇“插入-模塊”來(lái)新建。新建的模塊缺省的名稱為“模塊1”,“模塊2”,建議在屬性窗口內(nèi)更改為有意義的名稱。模塊任務(wù):(1)保存過(guò)程和函數(shù);(2)定義模塊內(nèi)的私有變量或整個(gè)工程的公有變量。2-7過(guò)程過(guò)程是最基本的運(yùn)行單位語(yǔ)法[Private|Public|Friend][Static]Subname[(arglist)]
[statements]
[ExitSub]
[statements]EndSub在以上程序中,Sub代表過(guò)程種類,表示運(yùn)行指定的操作,但不返回運(yùn)行結(jié)果;部分 描述Public可選的。表示所有模塊的所有其它過(guò)程都可訪問(wèn)這個(gè)Sub過(guò)程。如果在包含OptionPrivate的模塊中使用,則這個(gè)過(guò)程在該工程外是不可使用的。Private可選的。表示只有在包含其聲明的模塊中的其它過(guò)程可以訪問(wèn)該Sub過(guò)程。Friend可選的。只能在類模塊中使用。表示該Sub過(guò)程在整個(gè)工程中都是可見的,但對(duì)對(duì)象實(shí)例的控制者是不可見的。Static可選的。表示在調(diào)用之間保留Sub過(guò)程的局部變量的值。Static屬性對(duì)在Sub外聲明的變量不會(huì)產(chǎn)生影響,即使過(guò)程中也使用了這些變量。name必需的。Sub的名稱;遵循標(biāo)準(zhǔn)的變量命名約定。arglist可選的。代表在調(diào)用時(shí)要傳遞給Sub過(guò)程的參數(shù)的變量列表。多個(gè)變量則用逗號(hào)隔開。statements可選的。Sub過(guò)程中所執(zhí)行的任何語(yǔ)句組。2-8函數(shù)函數(shù)是具有返回值的過(guò)程語(yǔ)法[Public|Private|Friend][Static]Functionname[(arglist)][Astype][statements][name=expression][ExitFunction][statements][name=expression]EndFunction
部分 描述Public可選的。表示所有模塊的所有其它過(guò)程都可訪問(wèn)這個(gè)Function過(guò)程。如果是在包含OptionPrivate的模塊中使用,則這個(gè)過(guò)程在該工程外是不可使用。Private可選的。表示只有包含其聲明的模塊的其它過(guò)程可以訪問(wèn)該Function過(guò)程。Friend可選的。只能在類模塊中使用。表示該Function過(guò)程在整個(gè)工程中都是可見的,但對(duì)于對(duì)象實(shí)例的控制者是不可見的。Static可選的。表示在調(diào)用之間將保留Function過(guò)程的局部變量值。Static屬性對(duì)在該Function外聲明的變量不會(huì)產(chǎn)生影響,即使過(guò)程中也使用了這些變量。name必需的。Function的名稱;遵循標(biāo)準(zhǔn)的變量命名約定。arglist可選的。代表在調(diào)用時(shí)要傳遞給Function過(guò)程的參數(shù)變量列表。多個(gè)變量應(yīng)用逗號(hào)隔開。type可選的。Function過(guò)程的返回值的數(shù)據(jù)類型,可以是Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(除定長(zhǎng))、Object、Variant或任何用戶定義類型。statements可選的。在Function過(guò)程中執(zhí)行的任何語(yǔ)句組。expression可選的。Function的返回值。函數(shù)和過(guò)程區(qū)別調(diào)用一個(gè)過(guò)程(Sub)時(shí),必須鍵入過(guò)程名稱以及任何需要的參數(shù)值。Call語(yǔ)句可有可無(wú),如果使用它,則參數(shù)必須以括號(hào)括起來(lái)。調(diào)用函數(shù)(Function)時(shí),為了使用函數(shù)的返回值,必須指定函數(shù)給變量,并且用括號(hào)將參數(shù)封閉起來(lái)。
數(shù)組VBA程序流程控制VBA常用語(yǔ)句VBA編程基礎(chǔ)VBA概念VBA常用語(yǔ)句3-1VBA語(yǔ)句書寫規(guī)則VBA代碼不區(qū)分字母的大小寫系統(tǒng)保留字自動(dòng)轉(zhuǎn)換每個(gè)單詞的首字母大寫;語(yǔ)句書寫自由一行可書寫幾句語(yǔ)句,之間用冒號(hào)(:)分隔;一句語(yǔ)句可分若干行書寫,用續(xù)行符(_)將語(yǔ)句分開。3-2VBA常用語(yǔ)句賦值語(yǔ)句:給變量、常量或?qū)ο蟮膶傩灾付ㄒ粋€(gè)值或表達(dá)式。格式:變量名=表達(dá)式作用:將表達(dá)式的值賦值給變量名。一般用于給變量賦值或?qū)丶O(shè)定屬性值。例如:s=10Text1.Text="歡迎使用VBA"注意:雖然賦值號(hào)與關(guān)系運(yùn)算符等于號(hào)都用“=”表示,VBA會(huì)根據(jù)所處的位置自動(dòng)判斷是何種意義的符號(hào)聲明語(yǔ)句:命名和定義常量、變量、數(shù)組以及過(guò)程。注釋語(yǔ)句在程序中的適當(dāng)位置加上注釋語(yǔ)句有利于程序的維護(hù)和閱讀。
格式:Rem注釋內(nèi)容 或用單引號(hào)’注釋內(nèi)容數(shù)組VBA程序流程控制VBA常用語(yǔ)句VBA編程基礎(chǔ)VBA概念VBA程序流程控制順序、分支、循環(huán)結(jié)構(gòu)化程序設(shè)計(jì)由順序、分支、循環(huán)這3種基本結(jié)構(gòu)所組成。語(yǔ)句組2語(yǔ)句組1TF語(yǔ)句組2條件語(yǔ)句組1FT條件語(yǔ)句組TF條件語(yǔ)句組4-1分支結(jié)構(gòu)單行If語(yǔ)句格式:If表達(dá)式Then語(yǔ)句1[Else語(yǔ)句2]功能:If測(cè)試指定的條件,如果條件表達(dá)式為真(True),則執(zhí)行Then后面的語(yǔ)句1,否則執(zhí)行語(yǔ)句2(若Else子句未省略)。TF語(yǔ)句2條件語(yǔ)句1TF條件語(yǔ)句1PrivateSubp1()DimxAsInteger,yAsIntegerx=InputBox(“請(qǐng)輸入x值”)Ifx>=0Theny=2*x+1Elsey=1MsgBox"y:"&yEndSub根據(jù)輸入x的值,觀察y的輸出結(jié)果單行If語(yǔ)句舉例
多行If語(yǔ)句語(yǔ)句組可以由一條或多條語(yǔ)句組成,語(yǔ)句組不能與Then書寫在同一行,否則VBA認(rèn)為是一個(gè)單行If語(yǔ)句,會(huì)導(dǎo)致Else沒(méi)有匹配的If。語(yǔ)句“EndIf”是多行If語(yǔ)句的結(jié)束標(biāo)志。在多行If語(yǔ)句中,即使省略Else子句,也要寫該結(jié)束標(biāo)志。省略Else子句時(shí)的多行If語(yǔ)句形式為:
If表達(dá)式Then語(yǔ)句組 EndIf例:計(jì)算分段函數(shù)單行If語(yǔ)句實(shí)現(xiàn):
Ifx=0Theny=cos(x)-x^3+3*xIfx<>0Theny=sin(x)+sqr(x*x+1)
多行If語(yǔ)句實(shí)現(xiàn):Ifx<>0Theny=sin(x)+sqr(x*x+1)Elsey=cos(x)-x^3+3*xEndIfIf語(yǔ)句的嵌套If語(yǔ)句的嵌套是指If或Else后面的語(yǔ)句塊中又包含If語(yǔ)句。
If<表達(dá)式1>Then
If<表達(dá)式11>Then…EndIf
…
EndIf
例:已知x,y,z三個(gè)數(shù),使得x>y>z用一個(gè)IF語(yǔ)句和一個(gè)嵌套的IF語(yǔ)句實(shí)現(xiàn)Ifx<yThent=x:x=y:y=t
Ify<zThent=y:y=z:z=t
Ifx<yThent=x:x=y:y=tEndIf
EndIfIf語(yǔ)句的嵌套注意事項(xiàng):書寫鋸齒型;If與EndIf配對(duì)If<表達(dá)式1>Then <語(yǔ)句塊1>ElseIf<表達(dá)式2>Then <語(yǔ)句塊2> … [Else語(yǔ)句塊n+1]EndIfIf…Then…ElseIf語(yǔ)句(多分支結(jié)構(gòu))說(shuō)明不管有幾個(gè)分支,依次判斷,當(dāng)某條件滿足,執(zhí)行相應(yīng)的語(yǔ)句,其余分支不再執(zhí)行;若條件都不滿足,且有Else子句,則執(zhí)行該語(yǔ)句塊,否則什么也不執(zhí)行。ElseIf不能寫成ElseIf。例:已知百分制成績(jī)mark,顯示對(duì)應(yīng)的五級(jí)制成績(jī)下列三種方法哪些正確,哪些錯(cuò)誤?方法一Ifmark>=90ThenPrint"優(yōu)"ElseIfmark>=80ThenPrint"良"ElseIfmark>=70ThenPrint"中"ElseIfmark>=60ThenPrint"及格"ElsePrint"不及格"EndIf方法二Ifmark<60ThenPrint"不及格"ElseIfmark<70ThenPrint"及格"ElseIfmark<80ThenPrint"中"ElseIfmark<90ThenPrint"良"ElsePrint"優(yōu)"EndIf方法三Ifmark>=60ThenPrint"及格"ElseIfmark>=70ThenPrint"中"ElseIfmark>=80ThenPrint"良"ElseIfmark>=90ThenPrint"優(yōu)"ElsePrint"不及格"EndIf<表達(dá)式列表>:與<變量或表達(dá)式>同類型的下面四種形式之一:
表達(dá)式
例:"A"
一組枚舉表達(dá)式(用逗號(hào)分隔)
2,4,6,8
表達(dá)式1To表達(dá)式2
60To100
Is關(guān)系運(yùn)算符表達(dá)式
Is<60語(yǔ)句格式: SelectCase變量或表達(dá)式 Case表達(dá)式列表1 語(yǔ)句塊1 Case表達(dá)式列表2 語(yǔ)句塊2 … [CaseElse 語(yǔ)句塊n+1] EndSelect數(shù)值型或字符串表達(dá)式SelectCase語(yǔ)句(情況語(yǔ)句)程序流程圖語(yǔ)句塊n+1語(yǔ)句塊1語(yǔ)句塊2語(yǔ)句塊n條件2TF…...條件nTF條件1TF變量strC中存放一個(gè)字符,判斷該字符類型例如:在輸入成績(jī)文本框中輸入一個(gè)分?jǐn)?shù),單擊“判斷”命令按鈕后,在成績(jī)等級(jí)文本框中顯示對(duì)應(yīng)的成績(jī)等級(jí)。輸入的成績(jī)?cè)?0~100分為A,80~89分為B,70~79分為C,60~69分為D,0~59分為E,否則顯示出錯(cuò)信息。注意:根據(jù)題意,當(dāng)輸入的成績(jī)不在[0,100]內(nèi)時(shí),應(yīng)顯示出錯(cuò)信息,在該范圍內(nèi)時(shí),應(yīng)進(jìn)行分等級(jí)。判斷是否為合法成績(jī)可用If語(yǔ)句,而分等級(jí)最好使用SelectCase語(yǔ)句。條件函數(shù)IIf函數(shù)形式為:
IIf(表達(dá)式,當(dāng)表達(dá)式為True時(shí)的值,當(dāng)表達(dá)式為False時(shí)的值)例如:求x,y中大的數(shù),放入max變量中。 max=IIf(x>y,x,y)循環(huán)結(jié)構(gòu)
For…Next循環(huán)Do…Loop循環(huán)For…Next循環(huán)語(yǔ)句For…Next循環(huán)結(jié)構(gòu):將一段程序重復(fù)執(zhí)行指定的次數(shù),其中使用一個(gè)計(jì)數(shù)變量,統(tǒng)計(jì)執(zhí)行的次數(shù)。格式:For循環(huán)變量=初值to終值[Step步長(zhǎng)]語(yǔ)句塊 [ExitFor] 語(yǔ)句塊Next[循環(huán)變量]循環(huán)體循環(huán)變量得初值循環(huán)變量<=終值ExitFor語(yǔ)句塊循環(huán)變量加步長(zhǎng)結(jié)束False語(yǔ)句塊True注意功能:執(zhí)行For語(yǔ)句時(shí),“循環(huán)變量”設(shè)為“初值”;執(zhí)行到Next語(yǔ)句時(shí),步長(zhǎng)加(減)到循環(huán)變量上;再執(zhí)行For語(yǔ)句時(shí),若“循環(huán)變量”超過(guò)“終值”則循環(huán)結(jié)束。步長(zhǎng):未指定值時(shí)默認(rèn)為1。若“步長(zhǎng)”是正數(shù)或0,則“初值”應(yīng)大于等于“終值”,否則,“初值”應(yīng)小于等于“終值”。例:計(jì)算累加程序S=1+2+3+4….+x,并輸出結(jié)果方法:接收一個(gè)累加的終值,確定一個(gè)循環(huán)變量,循環(huán)變量有2個(gè)作用(加數(shù)和循環(huán)變量),確定一個(gè)存儲(chǔ)累加和的變量。使用循環(huán)計(jì)算,最后輸出顯示結(jié)果。
DimsAsinteger,xAsintegerx=InputBox("請(qǐng)輸入累加的終值")Fori=lToxs=s+iNext思考:計(jì)算=1+3+5+7…X或2+4+6+8…X如何編寫?例:計(jì)算累乘程序S=1*2*3*4…X方法:接收一個(gè)累乘的終值,確定一個(gè)循環(huán)變量,循環(huán)變量有2個(gè)作用(乘數(shù)和循環(huán)變量),確定一個(gè)存儲(chǔ)累乘積的變量。使用循環(huán)計(jì)算,最后輸出顯示結(jié)果。
DimSAsinteger,iAsintegerx=InputBox("請(qǐng)輸入累加的終值")S=1Fori=lToxS=S*iNext注意:累乘的乘數(shù)和乘積變量的初值為1。注意:出了循環(huán),循環(huán)控制變量值的問(wèn)題。例程序段:
Fori=2To13Step3循環(huán)執(zhí)行次數(shù)
debug.Printi 輸出i的值分別為:25811
Nextidebug.Printi出了循環(huán)輸出為:i=14例:改變循環(huán)控制變量對(duì)循環(huán)的影響PrivateSubCommand1_Click()j=0Fori=1To20Step2
i=i+3j=j+1Print"第";j;"次循環(huán)i=";iNextiPrint"退出循環(huán)后i=";iEndSub正常情況:i=1,3,5,7,9,11,13,15,17,19現(xiàn)在:i=4,9,14,19Do…Loop循環(huán)語(yǔ)句形式1:
Do{While|Until}<條件>語(yǔ)句塊[ExitDo語(yǔ)句塊]Loop形式2:
Do
語(yǔ)句塊[ExitDo語(yǔ)句塊]Loop{While|Until}<條件>Do…Loop循環(huán)語(yǔ)句Do…Loop語(yǔ)句(循環(huán)結(jié)構(gòu))DoWhile…Loop語(yǔ)句DoUntil…Loop語(yǔ)句Do…LoopWhile語(yǔ)句Do…LoopUntil語(yǔ)句DoWhile…Loop語(yǔ)句i=1DoWhilei<=10s=s+ii=i+1Loop
當(dāng)i<=10成立時(shí),執(zhí)行循環(huán)體循環(huán)變量i必須有初值防止產(chǎn)生死循環(huán)有可能一次也不執(zhí)行循環(huán)體修改循環(huán)控制變量,改變加數(shù)值
Do…LoopWhile
i=1Dos=s+ii=i+1LoopWhilei<=10當(dāng)i<=10成立時(shí),執(zhí)行循環(huán)體循環(huán)變量i必須有初值防止產(chǎn)生死循環(huán)至少執(zhí)行一次循環(huán)體修改循環(huán)控制變量,改變加數(shù)值DoUntil…Loop
i=1DoUntili>10s=s+ii=i+1Loop
當(dāng)i>10成立時(shí),結(jié)束執(zhí)行循環(huán)體循環(huán)變量i必須有初值防止產(chǎn)生死循環(huán)有可能一次也不執(zhí)行循環(huán)體修改循環(huán)控制變量,改變加數(shù)值Do…LoopUntil
i=1Dos=s+ii=i+1LoopUntili>10當(dāng)i>10成立時(shí),結(jié)束執(zhí)行循環(huán)體循環(huán)變量i必須有初值防止產(chǎn)生死循環(huán)至少執(zhí)行一次循環(huán)體修改循環(huán)控制變量,改變加數(shù)值補(bǔ)充:While…Wend語(yǔ)句格式如下: While<條件> <循環(huán)塊> Wend說(shuō)明:該語(yǔ)句的功能與DoWhile<條件>….Loop實(shí)現(xiàn)的循環(huán)完全相同。注意三種循環(huán)語(yǔ)句:即For、Do—Loop,共同的特點(diǎn)是重復(fù)執(zhí)行一個(gè)語(yǔ)句系列(循環(huán)體),不同點(diǎn)是控制重復(fù)次數(shù)的時(shí)機(jī)和方法不一樣。數(shù)組VBA程序流程控制VBA常用語(yǔ)句VBA編程基礎(chǔ)VBA概念數(shù)組5-1數(shù)組的概念數(shù)組:數(shù)組不是一種數(shù)據(jù)類型,而是一組相同類型的變量的集合??梢韵袷褂闷胀ㄗ兞恳粯邮褂脭?shù)組中的每一個(gè)元素。使用數(shù)組的好處是用一個(gè)數(shù)組名代表邏輯上相關(guān)的一批數(shù)據(jù),用下標(biāo)表示該數(shù)組中的各個(gè)元素,可以提高處理數(shù)據(jù)的效率,縮短和簡(jiǎn)化程序。5-2數(shù)組的定義
數(shù)組不是一種數(shù)據(jù)類型,而是一組相同類型的變量的集合,數(shù)組必須先聲明后使用。
兩類數(shù)組:靜態(tài)(定長(zhǎng))數(shù)組、動(dòng)態(tài)(可變長(zhǎng))數(shù)組
1.一維數(shù)組
定義一維數(shù)組的形式:Dim數(shù)組名([下界To]上界)[As類型]
聲明了數(shù)組的名、維數(shù)、大小、類型
說(shuō)明:數(shù)組名的命名規(guī)則與變量的命名相同。數(shù)組的元素個(gè)數(shù):上界-下界+1。缺省<下界>為0,若希望下標(biāo)從1開始,可在模塊的通用部分使用OptionBase語(yǔ)句將設(shè)為1。其使用格式是:
OptionBase0|1
'后面的參數(shù)只能取0或1
例如:
OptionBase1'將數(shù)組聲明中缺省<下界>下標(biāo)設(shè)為1<下界>和<上界>不能使用變量,必須是常量,常量可以是直接常量、符號(hào)常量,一般是整型常量。例:Dimmark(1to100)AsInteger例:Dima(-1to3)AsInteger聲明一維數(shù)組a,包含了5個(gè)整型元素a(-1)、a(0)、a(1)、a(2)、a(3);如果省略As子句,則數(shù)組的類型為變體類型。數(shù)組中各元素在內(nèi)存占一片連續(xù)的存儲(chǔ)空間,一維數(shù)組在內(nèi)存中存放的順序是按下標(biāo)大小的順序。注意:
在定義靜態(tài)數(shù)組時(shí),每一維的元素個(gè)數(shù)必須是常數(shù),不能是變量或表達(dá)式。
如:錯(cuò)誤的聲明,下標(biāo)是變量Dimx(n)或:n=Inputbox(“輸入n”)Dimx(n)AsSingle在數(shù)組聲明中的下標(biāo)說(shuō)明了數(shù)組的整體,即每維的大??;而在程序其他地方出現(xiàn)的下標(biāo)表示數(shù)組中的一個(gè)元素。兩者寫法形式相同,但意義不同。例如:Dimx(10)AsInteger
x(10)=100
表示聲明了數(shù)組x,有11個(gè)數(shù)組元素對(duì)x(10)這個(gè)數(shù)組元素賦值5-3
二維數(shù)組定義二維數(shù)組的形式:Dim數(shù)組名([下界1To]上界1,下界2To]上界2)As類型例如:Dima(2,3)AsSingle
二維數(shù)組在內(nèi)存的存放順序是“先行后列”。數(shù)組a的各元素在內(nèi)存中的存放順序是: a(0,0)→a(0,1)→a(0,2)→a(0,3) a(1,0)→a(1,1)→a(1,2)→a(1,3) a(2,0)→a(2,1)→a(2,2)→a(2,3)例:DimlArray(0To3,0To4)AsLong
共有4×5個(gè)元素等價(jià)于:DimlArray(3,4)AsLong5-4動(dòng)態(tài)數(shù)組
動(dòng)態(tài)數(shù)組指在聲明數(shù)組時(shí)未給出數(shù)組的大小(省略括號(hào)中的下標(biāo)),當(dāng)要使用它時(shí),隨時(shí)用ReDim語(yǔ)句重新指出數(shù)組大小。形式如下:
ReDim數(shù)組名(下標(biāo)[,下標(biāo)2…])[As類型]
例:Private
SubS1()
Dimx()AsSingle …
n=Inputbox(“輸入n”)
ReDimx(n)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度年福建省高校教師資格證之高等教育心理學(xué)考試題庫(kù)
- 2024年度山西省高校教師資格證之高等教育法規(guī)高分通關(guān)題型題庫(kù)附解析答案
- 第七章 膳食營(yíng)養(yǎng)指導(dǎo)與疾病預(yù)防課件
- 二年級(jí)數(shù)學(xué)(上)計(jì)算題專項(xiàng)練習(xí)匯編
- 保密工作培訓(xùn)心得體會(huì)
- 2020屆中考科學(xué)(杭州版)復(fù)習(xí)同步練習(xí)題:第三篇-主題3-第六單元-電流熱效應(yīng)和電功率的測(cè)量
- 購(gòu)買保險(xiǎn)欺騙退還本金指導(dǎo)案例
- 高級(jí)室內(nèi)裝飾設(shè)計(jì)人員理論知識(shí)試題求答案(5篇模版)
- 2024年專業(yè)石材安裝服務(wù)協(xié)議模板
- 2024年度德邦速運(yùn)協(xié)議條款明細(xì)
- 期中測(cè)評(píng)試卷(1-4單元)(試題)-2024-2025學(xué)年人教版三年級(jí)數(shù)學(xué)上冊(cè)
- GB/T 15822.1-2024無(wú)損檢測(cè)磁粉檢測(cè)第1部分:總則
- 新質(zhì)生產(chǎn)力解讀課件
- 學(xué)生對(duì)教師評(píng)價(jià)表(共8頁(yè))
- 批發(fā)零售大個(gè)體 E204-3批發(fā)和零售業(yè)產(chǎn)業(yè)活動(dòng)單位(個(gè)體經(jīng)營(yíng)戶)商品銷售和庫(kù)存
- 異辛酸鈉合成工藝及建設(shè)項(xiàng)目
- 西電計(jì)組課程設(shè)計(jì)報(bào)告
- 汽車買賣合同工商示范文本
- SC鍍鋅鋼管緊定式連接施工工法(共12頁(yè))
- 梅克爾憩室PPT參考幻燈片
- 動(dòng)車組火災(zāi)檢測(cè)(報(bào)警)系統(tǒng)
評(píng)論
0/150
提交評(píng)論