




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
程序一指名之陳述式串列,可當(dāng)為一執(zhí)行單元。例如,F(xiàn)unction、Property,和Sub均為一種程序。程序的名稱是在模組層次定義,所有可執(zhí)行的程式碼必須包含在程序內(nèi),一程序不能在套在其它程序中。程序的性質(zhì)程序Sub陳述式
[Private|Public][Static]Subname[(arglist)]
[statements]
[ExitSub]
[statements]EndSub程序的性質(zhì)程序Public選擇性引數(shù)。表示任何模組裏的所有其它程序都可呼叫Sub
程序。如果模組裏有
OptionPrivate,那麼此程序就不能在專案之外使用。Private選擇性引數(shù)。表示Sub
程序只在宣告它之模組裏的程序所使用。Static選擇性引數(shù)。表示Sub
程序的區(qū)域變數(shù)在呼叫之間會(huì)將值保留下來。Static
不會(huì)影響在
Sub
之外所宣告的變數(shù),就算它們?cè)诔绦蛑杏斜皇褂玫?。程序的性質(zhì)程序name必要的引數(shù)。Sub的名稱,遵循標(biāo)準(zhǔn)變數(shù)命名規(guī)格。arglist選擇性引數(shù)。表示呼叫
Sub程序時(shí)所傳送引數(shù)的變數(shù)清單。變數(shù)以逗號(hào)隔開。statements選擇性引數(shù)。任何
Sub
程序要執(zhí)行的陳述式群組。程序的性質(zhì)程序arglist
引數(shù)有下列語法和單元:[Optional][ByVal|ByRef][ParamArray]varname[()][As
type][=defaultvalue]Optional選擇性引數(shù)。表示引數(shù)不是必要的關(guān)鍵字。如果使用了,在
arglist
裏所有後來的引數(shù)也都必須是選擇性的,而且也必須用Optional
關(guān)鍵字來宣告。如果已經(jīng)使用了
ParamArray
,就不可以在引數(shù)上再使用Optional。程序的性質(zhì)程序ByVal選擇性引數(shù)。表示以傳值的方式來傳遞引數(shù)。ByRef選擇性引數(shù)。表示以傳址的方式來傳遞引數(shù)。VisualBasic預(yù)設(shè)為
ByRef。ParamArray選擇性引數(shù)。使用在arglist
的最後一個(gè)引數(shù)上,表示此引數(shù)是Variant
元素的
Optional
陣列。ParamArray
關(guān)鍵字讓您可以使用多個(gè)引數(shù),但不可以和ByVal、ByRef、或
Optional
共用。varname必要的引數(shù)。引數(shù)之變數(shù)的名稱,遵循標(biāo)準(zhǔn)變數(shù)命名規(guī)格。type選擇性引數(shù)。傳給程序的引數(shù)之資料型態(tài),可以是Byte、Boolean
、Integer、Long、Currency、Single、Double、Decimal(目前尚未支援)、Date、String(只限可變長(zhǎng)度)、Object或Variant。如果引數(shù)不是Optional的,則可指定使用者自訂型態(tài)或物件型態(tài)。defaultvalue選擇性引數(shù)。任何常數(shù)或常數(shù)運(yùn)算式,只能使用在
Optional
的引數(shù)上。如果型態(tài)是Object,則預(yù)設(shè)值只能是
Nothing。程序的性質(zhì)程序如果沒有明確的使用Public、Private或Sub程序預(yù)設(shè)是公用的。如果沒有使用Static,則區(qū)域變數(shù)的值在呼叫之間是不保留的。注意Sub程序可以遞迴,也就是它們可以呼叫自己。然而,遞迴可能會(huì)造成堆疊溢位。Static關(guān)鍵字通常不使用在遞迴的Sub程序上。Ex534-2534-3所有的可執(zhí)行程式碼都必須在程序中。不可以在Function、Sub或Property程序裏定義其它的Sub程序。ExitSub陳述式會(huì)使Sub程序立即停止。程式會(huì)從呼叫該Sub程序的下一行陳述式繼續(xù)執(zhí)行。ExitSub陳述式可以在Sub程序任何位置出現(xiàn),且不限次數(shù)。程序的性質(zhì)程序程序可使用不是在該程序裏明確宣告的變數(shù),但是若在模組層次定義了相同的名稱,就會(huì)發(fā)生名稱上的衝突。如果程序裏引用了未宣告的變數(shù),而此變數(shù)的名稱和其它程序、常數(shù)、或變數(shù)的名稱相同,那麼就會(huì)認(rèn)定該程序引用模組層次的名稱。所以,請(qǐng)明確的宣告變數(shù)以避免此種衝突??梢允褂肙ptionExplicit陳述式來強(qiáng)迫明確的宣告變數(shù)。不可以使用GoSub、GoTo
或Return來進(jìn)入或離開Sub程序。程序的性質(zhì)程序如同Sub程序一樣,F(xiàn)unction程序是獨(dú)立的程序,可以接受引數(shù),執(zhí)行一串陳述式,並且改變引數(shù)的值。然而,不像Function程序會(huì)傳回值,Sub程序無法在運(yùn)算式裏使用。只要使用程序名稱後,接著以括號(hào)括起來的引數(shù)列,就可以呼叫Sub程序。請(qǐng)參考Call陳述式以得知關(guān)於如何呼叫Sub程序的特定資訊。在Sub程序中使用的變數(shù)有兩類:一為程序中明確宣告的,以及不是此類的。在程序中明確宣告的變數(shù)(使用Dim或同類字),必為區(qū)域性的。程序中使用到,但未明確在程序中宣告的變數(shù)也是區(qū)域的,除非此變數(shù)已經(jīng)在程序外的更高層次中明確宣告過。程序的性質(zhì)程序建立一個(gè)名為Show_data
之程序(or副程式)程序的性質(zhì)程序執(zhí)行show_data
副程式程序的性質(zhì)程序程序的性質(zhì)程序Function陳述式語法[Public|Private|Friend][Static]Functionname[(arglist)][Astype]
[statements]
[name=expression]
[ExitFunction]
[statements]
[name=expression]EndFunctionFunction陳述式的語法與副程式相似函數(shù)的性質(zhì)程序若無明確地指定Public、Private或Function程序,則預(yù)設(shè)為公用的。如果沒有使用Static,區(qū)域變數(shù)的值在每次呼叫之間不會(huì)保留下來。所有的可執(zhí)行程式碼都必須在程序中。不可以在Function、Sub或Property程序裏定義其它的Function程序。函數(shù)的性質(zhì)程序如同Sub程序,F(xiàn)unction程序是可接受引數(shù)、執(zhí)行一串陳述式並且改變其引數(shù)值的獨(dú)立程序。然而,與Sub程序不同的是,當(dāng)您想運(yùn)用函數(shù)的傳回值時(shí),F(xiàn)unction程序可以放在運(yùn)算式的右方,就如同使用內(nèi)建函數(shù)一樣,例如Sqr、Cos
或Chr。運(yùn)算式中只要使用函數(shù)名稱接著以括號(hào)括起來的引數(shù)列,就可以呼叫Function程序。請(qǐng)參考Call陳述式以得知關(guān)於如何呼叫Function程序的特定資訊。若要從函數(shù)中傳回值,須指定該值給函數(shù)名稱。這種指定式可出現(xiàn)於程序中的任何位置,且不限次數(shù)。如果沒有指定值給name,則程序會(huì)傳回預(yù)設(shè)值函數(shù)的性質(zhì)程序程序可使用不是在該程序中宣告過的變數(shù),但是若在模組層次定義相同的名稱,就會(huì)發(fā)生名稱上的衝突。如果程序裏引用了未宣告的變數(shù),而此變數(shù)的名稱和其它程序、常數(shù)或變數(shù)的名稱相同,則會(huì)認(rèn)定程序是引用模組層次的名稱。所以,請(qǐng)明確地宣告變數(shù)以避免此種衝突??墒褂肙ptionExplicit陳述式來強(qiáng)迫變數(shù)的宣告。函數(shù)的性質(zhì)程序Call陳述式將程式控制權(quán)轉(zhuǎn)移到一個(gè)Sub程序,Function程序,或動(dòng)態(tài)連結(jié)資料庫(kù)(DLL)
程序。語法[Call]name[argumentlist]呼叫程序程序當(dāng)您要呼叫一個(gè)程序時(shí),並不一定要使用Call關(guān)鍵字。但如果您使用Call關(guān)鍵字來呼叫一個(gè)需要引數(shù)的程序,那麼argumentlist
也必須要加上括號(hào)。如果省略了Call關(guān)鍵字,那麼也必須要省略括號(hào)。如果您使用Call語法來呼叫內(nèi)建函數(shù)或使用者定義函數(shù),則函數(shù)的傳回值將會(huì)無法傳回。若要將整個(gè)陣列傳給一個(gè)程序,請(qǐng)使用陣列名稱,然後在陣列名稱後加上空括號(hào)。呼叫程序程序程序的設(shè)計(jì)方法SubCalc()DimTotalDimNAsIntegerDimKAsIntegerN=ActiveCell.ValueTotal=1ForK=1ToNTotal=Total*KNextActiveCell.Offset(0,1).Value=TotalEndSubPrivateSubCommandButton1_Click()DimR1AsRangeDimCelAsRangeSetR1=Application.InputBox("Choosetherangethatwewanttocalculateitsfactorial",_"Facorial",Type:=8)ForEachCelInR1
Cel.Select
Calc'呼叫程序
NextEndSub程序’Sheet1的程序
SubShow_Msg()
MsgBox"工作表的程序"EndSub’Sheet2的按鈕
PrivateSubCommandButton1_Click()’按鈕的事件
Show_Msg
’呼叫程序
EndSub程序的作用範(fàn)圍程序程序的作用範(fàn)圍程序程序的作用範(fàn)圍程序程序的作用範(fàn)圍程序SubGet_Area()Dimarea,radius
get_value:radius=InputBox("請(qǐng)輸入半徑:")Ifradius>0Then
GoTocalc1'計(jì)算並顯示面積
Else
MsgBox"半徑不可以小於0"
GoTo
get_value'重新讀取資料
EndIf
calc1:area=radius*radius*3.1416
MsgBox"面積=="&areaEndSub程序的設(shè)計(jì)方法程序SubGet_Num()Dimnum_1,num_2AsLongtimes=10DoWhiletimes>0'做不完的迴圈
num_1=InputBox("請(qǐng)輸入一個(gè)整數(shù),或輸入0結(jié)束")Ifnum_1=0Then
ExitSub'離開副程式
EndIfnum_2=num_1*num_1
MsgBoxnum_1&"的平方=="&num_2LoopEndSub程序的設(shè)計(jì)方法程序Subshow_data()
DimnumAsInteger'宣告變數(shù)
num=1234
MsgBox"程序中的num=="&numEndSubPrivateSubCommandButton1_Click()DimnumAsInteger'宣告變數(shù)
num=5678
show_data
MsgBox"主程式的num=="&numEndSub程序的設(shè)計(jì)方法程序’宣告區(qū)DimnumAsInteger‘宣告變數(shù)SubGet_num()
num=12345'設(shè)定EndSubPrivateSubCommandButton1_Click()
Get_num
MsgBox"共用的變數(shù)num=="&num‘顯示EndSub程序的設(shè)計(jì)方法程序FunctionSet_color()
ActiveCell.Font.Color=RGB(255,0,0)
ActiveCell.Interior.ColorIndex=35EndFunctionPrivateSubWorksheet_SelectionChange(ByValTargetAsRange)score=Target.ValueIfTypeName(score)="Double"Andscore<60Then
Set_color
‘呼叫函數(shù)
EndIfEndSub函數(shù)的宣告方法程序Functioncalc()DimtotalAsLongtotal=0Fork=1To100total=total+k*kNext
calc=total'用函數(shù)的名稱傳回?cái)?shù)植EndFunctionPrivateSubCommandButton1_Click()
new_num=calc()
MsgBox"函數(shù)傳回的數(shù)值=="&new_numEndSub函數(shù)的宣告方法程序Functioncalc()AsInteger’指定傳回值的型態(tài)
Dimtotaltotal=0Fork=1To100total=total+kNext
calc=total’傳回計(jì)算結(jié)果EndFunctionPrivateSubCommandButton1_Click()type_1=TypeName(calc())’讀取型態(tài)
MsgBox"函數(shù)傳回的型態(tài)數(shù)值=="&type_1’顯示型態(tài)EndSub函數(shù)的宣告方法程序’Module1的函數(shù)
FunctionTestMemory()
TestMemory=Application.MemoryFree
EndFunction函數(shù)的作用範(fàn)圍引數(shù)的設(shè)定方法Subset_color(num)’指定引數(shù)
Selection.Interior.ColorIndex=num’使用引數(shù)EndSubPrivateSubCommandButton1_Click()Range("b2:c3").Select
set_color35'呼叫並傳遞引數(shù)
'callset_color(35)
也可以寫成這樣EndSub引數(shù)的設(shè)定方法FunctionSigma(n)’函數(shù)的引數(shù)
DimtotalAsLongtotal=0Fork=1Tontotal=total+kNext
Sigma=totalEndFunctionPrivateSubCommandButton1_Click()
num=Sigma(50)’呼叫函數(shù)並傳遞引數(shù)
MsgBox"1+2+3+...+50="&numEndSub引數(shù)的設(shè)定方法Functiontotal(num_1,num_2,num_3)'使用三個(gè)引數(shù)
total=num_1+num_2+num_3'計(jì)算並傳回總分EndFunctionPrivateSubCommandButton1_Click()Setr1=Range("b2:b5")ForEachkInr1n1=k.Value'國(guó)文科成績(jī)
n2=k.Offset(0,1).Value‘英文科成績(jī)
n3=k.Offset(0,2).Value'數(shù)學(xué)科成績(jī)
k.Offset(0,3).Value=total(n1,n2,n3)'總分
NextEndSub引數(shù)的設(shè)定方法引數(shù)的型態(tài)與傳遞方法Subshow_data(num
AsInteger)'指定引數(shù)的型態(tài)
MsgBoxnum'只會(huì)顯示整數(shù)的部份EndSubPrivateSubCommandButton1_Click()
show_data12345.678'傳遞給程序的引數(shù)EndSub引數(shù)的型態(tài)與傳遞方法SubChange(msg)‘PassByRefisdefault
msg=“VBA與進(jìn)階應(yīng)用”'更改變數(shù)
MsgBox"程序中的字串=="&msgEndSubPrivateSubCommandButton1_Click()string_1=“Excel2003”'指定一個(gè)變數(shù)
Changestring_1'傳遞給程序
MsgBox"主程中的字串=="&string_1EndSub引數(shù)的型態(tài)與傳遞方法SubChange(ByVal
msg)
msg=“VBA與進(jìn)階應(yīng)用”'更改變數(shù)
MsgBox"程序中的字串=="&msgEndSubPrivateSubCommandButton1_Click()string_1=“Excel2003”'指定一個(gè)變數(shù)
Changestring_1'傳遞給程序
MsgBox"主程中的字串=="&string_1EndSub引數(shù)的型態(tài)與傳遞方法Functionnew_sum(ByValtargetAsRange)total=0
ForEachkIntargettotal=total+k.Value
Next
new_sum=totalEndFunction選擇性的引數(shù)Thenumberandorderoftheargumentsmustmatch!!Subshow_str(s1,s2)'宣告兩個(gè)引數(shù)
MsgBoxs1'只顯示一個(gè)引數(shù)EndSubPrivateSubCommandButton1_Click()Dimmsg_1,msg_2AsStringmsg_1="1111111111"msg_2="BBBBBBBBB"
show_str
msg_1,msg_2‘傳遞兩個(gè)變數(shù)EndSub選擇性的引數(shù)Subshow_str(s1,s2)'宣告兩個(gè)引數(shù)
MsgBoxs1'只顯示一個(gè)引數(shù)EndSubPrivateSubCommandButton1_Click()Dimmsg_1,msg_2AsStringmsg_1="1111111111"msg_2="BBBBBBBBB"
show_str
msg_1‘傳遞一個(gè)變數(shù)EndSubWillhaveaerrormessageHavetouse“Optional”intheargumentlistinSubshow_str選擇性的引數(shù)Subshow_str(s1,Optionals2)'選擇性的引數(shù)
MsgBoxs1'只顯示一個(gè)引數(shù)EndSubPrivateSubCommandButton1_Click()Dimmsg_1,msg_2AsStringmsg_1="Excel2003"msg_2="VBA與進(jìn)階應(yīng)用"
show_str
msg_1,msg_2'傳遞兩個(gè)變數(shù)EndSub選擇性的引數(shù)Subshow_str(s1,Optionals2="空白的引數(shù)“
)’指定預(yù)設(shè)值
MsgBoxs1&vbCrLf&s2EndSubPrivateSubCommandButton1_Click()Dimmsg_1,msg_2AsStringmsg_1="第一個(gè)引數(shù)"msg_2="第二個(gè)引數(shù)"
show_str
msg_1‘傳遞一個(gè)變數(shù)
show_str
msg_1,msg_2‘傳遞兩個(gè)變數(shù)EndSub選擇性的引數(shù)Functioncalc_num(n1,Optionaln2)IfIsMissing(n2)Then'如果沒有傳入
calc_num=n1*n1'就傳回第一個(gè)數(shù)值的平方
Else'如果引數(shù)有傳入
calc_num=n1*n2'就傳回兩個(gè)數(shù)的乘積
EndIfEndFunctionPrivateSubCommandButton1_Click()Dimnum_1,num_2num_1=calc_num(50)‘只傳遞一引數(shù)
num_2=calc_num(50,60)‘傳遞兩個(gè)引數(shù)
MsgBox"50的平方=="&num_1&vbCrLf&_"50*60=="&num_2EndSub指名引數(shù)Theorderandtypeofargumentsmustmatch!!!Subshow_data(nameAsString,ageAsInteger)data="姓名:"&name&vbCrLf&_"年齡:"&age
MsgBoxdataEndSubPrivateSubCommandButton1_Click()
show_data"冷霜子",350EndSub指名引數(shù)Subshow_data(nameAsString,ageAsInteger)data="姓名:"&name&vbCrLf&_"年齡:"&age
MsgBoxdataEndSubPrivateSubCommandButton1_Click()
show_data302,"胡鐵花"’順序顛倒EndSubAnerror!!!!Typemismatch!Toavoidthismistake,youhavetouse指名引數(shù).指名引數(shù)Subshow_data(nameAsString,ageAsInteger)data="姓名:"&name&vbCrLf&_"年齡:"&age
MsgBoxdataEndSubPrivateSubCommandButton1_Click()
show_data
age:=302,name:="胡鐵花"
順序顛倒EndSubToavoidthismistake,youhavetouse指名引數(shù)指名引數(shù)Subshow_data(nameAsString,ageAsInteger,jobAsString)data="姓名:"&name&vbCrLf&_"年齡:"&age&vbCrLf&_"職業(yè):"&job
MsgBoxdataEndSubPrivateSubCommandButton1_Click()
show_data
job:="遊民",_
age:=35,_
name:="金不換"EndSubToavoidthismistake,youhavetouse指名引數(shù)參數(shù)陣列Functioncalc_sum(ParamArrayscore())’參數(shù)陣列
total=0num_1=UBound(score())’陣列的長(zhǎng)度
Fork=0Tonum_1total=total+score(k)Next
calc_sum=totalEndFunctionPrivateSubCommandButton1_Click()[b2]=calc_sum(1,2,3,4,5,6,7,8,9,10)’10個(gè)引數(shù)[b3]=calc_sum(123,456,789)’3個(gè)引數(shù)[b4]=calc_sum(1234,5678)’2個(gè)引數(shù)EndSub指名引數(shù)Functioncalc_sum(ParamArrayscore()asinteger)’指定型態(tài)
total=0num_1=UBound(score())Fork=0Tonum_1total=total+score(k)Next
calc_sum=totalEndFunctionPrivateSubCommandButton1_Click()[b2]=calc_sum(1,2,3,4,5,6,7,8,9,10)[b3]=calc_sum(123,456,789)[b4]=calc_sum(1234,5678)EndSub模組的管理模組的管理模組的管理共用的常數(shù)程序函數(shù)模組的管理模組元件的作用範(fàn)圍’Module1的程序
Subshow_data()
MsgBox"Module1宣告的程序"EndSub’Sheet2的按鈕
PrivateSubCommandButton1_Click()
show_dataEndSub模組元件的作用範(fàn)圍’Module1的函數(shù)
Functiontotal(n1,n2)total=n1+n2EndFunction’Module2的程序
Subshow_data()num1=100num2=200
MsgBox"總合="&total(num1,num2)EndSub模組元件的作用範(fàn)圍’Module1的函數(shù)PrivateFunctiontotal(n1,n2)total=n1+n2EndFunction’Module2的程序Subshow_data()num1=100num2=200
MsgBox"總合="&total(num1,num2)EndSubStatic變數(shù)與函數(shù)PrivateSubCommandButton1_Click()
Dimtotal,counter’在程序內(nèi)宣告的變數(shù)
counter=counter+1total=total+100
MsgBox"呼叫次數(shù)=="&counter&vbCrLf&_"總合=="&totalEndSubStatic變數(shù)與函數(shù)PrivateSubCommandBu
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 計(jì)算機(jī)軟件編程基礎(chǔ)試題集及答案解析
- 移動(dòng)醫(yī)療健康應(yīng)用軟件授權(quán)使用協(xié)議
- 物業(yè)管理裝修協(xié)議書
- 產(chǎn)品市場(chǎng)推廣策略與操作手冊(cè)編制
- 設(shè)備分期付款銷售合同
- 初中生心理健康故事
- 國(guó)際物流與運(yùn)輸合同
- 知識(shí)產(chǎn)權(quán)轉(zhuǎn)讓協(xié)議簽署細(xì)節(jié)說明
- 物流行業(yè)個(gè)性化配送優(yōu)化方案
- 初中生職業(yè)規(guī)劃課程心得
- 醫(yī)院實(shí)習(xí)生崗前培訓(xùn)課件
- 照明燈具統(tǒng)計(jì)表
- 杭州市居住房屋出租安全管理若干規(guī)定
- 2022年江西工業(yè)貿(mào)易職業(yè)技術(shù)學(xué)院職業(yè)適應(yīng)性測(cè)試題庫(kù)及答案解析
- 給水排水管道工程質(zhì)量通病以及防治
- 計(jì)算機(jī)視覺全套課件
- 中國(guó)聯(lián)通IMS接口規(guī)范 第三分冊(cè):Sh接口 V1.0
- protel完全教程(原理圖部分)
- 迎澤公園文化廣場(chǎng)歌詞匯集
- 環(huán)境化學(xué)物的毒性作用及其影響因素
- Q∕GDW 12176-2021 反竊電監(jiān)測(cè)終端技術(shù)規(guī)范
評(píng)論
0/150
提交評(píng)論