"Function" thiab "Sub" txheej txheem hauv VBA

Ua-hauv VBA Functions

Ua ntej koj pib tsim koj tus kheej VBA lub luag haujlwm, nws yog qhov zoo kom paub tias Excel VBA muaj cov kev sau nplua nuj ntawm cov haujlwm ua ntej uas koj tuaj yeem siv thaum sau koj cov lej.

Cov npe ntawm cov haujlwm no tuaj yeem pom hauv VBA editor:

  • Qhib phau ntawv ua haujlwm Excel thiab tso tawm VBA editor (nias ua qhov no Alt + F11), thiab tom qab ntawd nias F2.
  • Xaiv ib lub tsev qiv ntawv los ntawm cov npe dropdown nyob rau sab laug ntawm lub vijtsam VBA.
  • Cov npe ntawm cov chav kawm VBA built-in thiab cov haujlwm yuav tshwm sim. Nyem rau ntawm lub npe ua haujlwm los tso saib nws cov lus piav qhia luv luv hauv qab ntawm lub qhov rais. nias F1 yuav qhib nplooj ntawv pab online rau qhov feature.

Tsis tas li ntawd, cov npe ua tiav ntawm VBA ua haujlwm nrog cov piv txwv tuaj yeem pom ntawm Visual Basic Developer Center.

Cov txheej txheem kev cai "Function" thiab "Sub" hauv VBA

Hauv Excel Visual Basic, ib txheej ntawm cov lus txib uas ua haujlwm tshwj xeeb tau muab tso rau hauv cov txheej txheem. muaj nuj nqi (Function) los yog sub (Subroutine). Lub ntsiab sib txawv ntawm cov txheej txheem muaj nuj nqi и sub yog tus txheej txheem muaj nuj nqi rov tshwm sim, txheej txheem sub - tsis yog.

Yog li ntawd, yog tias koj xav tau ua thiab tau txais qee qhov txiaj ntsig (piv txwv li, suav nrog ntau tus lej), ces cov txheej txheem feem ntau yog siv. muaj nuj nqi, thiab txhawm rau ua kom yooj yim ua qee qhov kev ua (piv txwv li, hloov cov formatting ntawm ib pawg ntawm tes), koj yuav tsum xaiv cov txheej txheem sub.

Kev sib ceg

Ntau cov ntaub ntawv tuaj yeem dhau mus rau VBA cov txheej txheem siv cov lus sib cav. Daim ntawv teev lus sib cav tau teev tseg thaum tshaj tawm cov txheej txheem. Piv txwv li, cov txheej txheem sub nyob rau hauv VBA ntxiv qhov muab tus lej (Integer) rau txhua lub xov tooj ntawm cov khoom xaiv. Koj tuaj yeem hla tus lej no mus rau tus txheej txheem siv kev sib cav, zoo li no:

Sub AddToCells(i As Integer)... End Sub

Nco ntsoov tias muaj kev sib cav rau cov txheej txheem muaj nuj nqi и sub hauv VBA yog xaiv tau. Qee cov txheej txheem tsis xav tau kev sib cav.

Xaiv cov lus sib cav

Cov txheej txheem VBA tuaj yeem muaj kev sib cav xaiv tau. Cov no yog cov lus sib cav uas tus neeg siv tuaj yeem qhia tau yog tias lawv xav tau, thiab yog tias lawv raug tshem tawm, cov txheej txheem siv cov txiaj ntsig zoo rau lawv.

Rov qab mus rau qhov piv txwv yav dhau los, ua kom muaj qhov sib cav sib ceg rau qhov kev xaiv ua haujlwm, nws yuav raug tshaj tawm zoo li no:

Sub AddToCells(Optional i As Integer = 0)

Hauv qhov no, qhov kev sib cav integer i lub default yuav yog 0.

Nws tuaj yeem muaj ntau qhov kev xaiv sib cav nyob rau hauv ib txoj kev, tag nrho cov uas tau teev nyob rau hauv qhov kawg ntawm daim ntawv sib cav.

Hla kev sib cav los ntawm tus nqi thiab los ntawm kev siv

Cov lus sib cav hauv VBA tuaj yeem dhau mus rau tus txheej txheem hauv ob txoj hauv kev:

  • ByVal - hla kev sib cav los ntawm tus nqi. Qhov no txhais tau hais tias tsuas yog tus nqi (uas yog, ib daim qauv ntawm qhov kev sib cav) tau dhau mus rau tus txheej txheem, thiab yog li ntawd ib qho kev hloov pauv rau qhov kev sib cav hauv cov txheej txheem yuav ploj thaum cov txheej txheem tawm.
  • ByRef - hla kev sib cav los ntawm kev siv. Ntawd yog, qhov chaw nyob tiag tiag ntawm qhov kev sib cav qhov chaw hauv kev nco tau dhau mus rau tus txheej txheem. Txhua qhov kev hloov pauv rau qhov kev sib cav hauv cov txheej txheem yuav raug cawm thaum txoj kev tawm mus.

Siv cov lus tseem ceeb ByVal or ByRef nyob rau hauv cov txheej txheem tshaj tawm, koj tuaj yeem qhia meej tias qhov kev sib cav tau dhau mus rau tus txheej txheem li cas. Qhov no yog qhia hauv cov piv txwv hauv qab no:

Sub AddToCells(ByVal i As Integer)... End Sub
Hauv qhov no, qhov kev sib cav integer i dhau los ntawm tus nqi. Tom qab tawm ntawm cov txheej txheem sub tag nrho ua nrog i kev hloov pauv yuav ploj mus.
Sub AddToCells(ByRef i As Integer)... End Sub
Hauv qhov no, qhov kev sib cav integer i dhau los ntawm kev siv. Tom qab tawm ntawm cov txheej txheem sub tag nrho ua nrog i cov kev hloov pauv yuav muab khaws cia rau hauv qhov sib txawv uas tau dhau mus rau tus txheej txheem sub.

Nco ntsoov tias cov lus sib cav hauv VBA tau dhau los ntawm kev siv los ntawm lub neej ntawd. Hauv lwm lo lus, yog cov ntsiab lus tsis siv ByVal or ByRef, ces qhov kev sib cav yuav dhau los ntawm kev siv.

Ua ntej ua cov txheej txheem muaj nuj nqi и sub Hauv kev nthuav dav ntxiv, nws yuav muaj txiaj ntsig zoo los saib lwm yam ntawm cov yam ntxwv thiab qhov sib txawv ntawm ob hom txheej txheem no. Cov hauv qab no yog cov kev sib tham luv luv ntawm VBA cov txheej txheem muaj nuj nqi и sub thiab cov piv txwv yooj yim tau qhia.

VBA txheej txheem "Function"

VBA editor paub txog cov txheej txheem muaj nuj nqithaum nws ntsib ib pawg ntawm cov lus txib uas nyob nruab nrab ntawm cov lus qhib thiab kaw hauv qab no:

Muaj nuj nqi... Kawg Function

Raws li tau hais ua ntej, txheej txheem muaj nuj nqi hauv VBA (as opposed to sub) rov qab tus nqi. Cov cai hauv qab no siv rau cov nqi rov qab:

  • Hom ntaub ntawv ntawm tus nqi xa rov qab yuav tsum tau tshaj tawm nyob rau hauv header ntawm tus txheej txheem muaj nuj nqi.
  • Qhov sib txawv uas muaj tus nqi rov qab yuav tsum muaj npe tib yam li cov txheej txheem muaj nuj nqi. Qhov kev sib txawv no tsis tas yuav tsum tau tshaj tawm cais, vim nws ib txwm muaj nyob ua ib feem tseem ceeb ntawm cov txheej txheem. muaj nuj nqi.

Qhov no tau piav qhia zoo hauv qhov piv txwv hauv qab no.

VBA Function Piv txwv: Ua lej Ua Haujlwm ntawm 3 Tus lej

Hauv qab no yog ib qho piv txwv ntawm tus txheej txheem VBA muaj nuj nqi, uas yuav siv peb qhov kev sib cav ntawm hom ob chav (ob npaug-precision floating-point tus lej). Raws li qhov tshwm sim, cov txheej txheem rov ua dua lwm hom ob chavsib npaug ntawm qhov sib npaug ntawm thawj ob qhov kev sib cav rho tawm qhov kev sib cav thib peb:

Function SumMinus(dNum1 As Double, dNum2 As Double, dNum3 As Double) As Double SumMinus = dNum1 + dNum2 - dNum3 End Function

Qhov no yooj yim heev VBA txheej txheem muaj nuj nqi piav qhia txog yuav ua li cas cov ntaub ntawv raug xa mus rau tus txheej txheem los ntawm kev sib cav. Koj tuaj yeem pom tias hom ntaub ntawv xa rov qab los ntawm tus txheej txheem yog txhais li ob chav (cov lus hais Raws li Ob tom qab daim ntawv teev cov lus sib cav). Qhov piv txwv no kuj qhia tau hais tias qhov tshwm sim ntawm tus txheej txheem muaj nuj nqi khaws cia rau hauv qhov sib txawv nrog tib lub npe raws li tus txheej txheem npe.

Hu rau tus txheej txheem VBA "Function"

Yog hais tias cov txheej txheem yooj yim saum toj no muaj nuj nqi muab tso rau hauv ib qho module hauv Visual Basic editor, nws tuaj yeem raug hu los ntawm lwm cov txheej txheem VBA lossis siv rau ntawm daim ntawv ua haujlwm hauv Excel phau ntawv.

Hu rau VBA txheej txheem "Function" los ntawm lwm tus txheej txheem

Tus txheej txheem muaj nuj nqi tuaj yeem raug hu los ntawm lwm tus txheej txheem VBA los ntawm tsuas yog muab cov txheej txheem ntawd rau qhov sib txawv. Cov piv txwv hauv qab no qhia tau hais tias hu rau ib tus txheej txheem Summinus, uas tau txhais saum toj no.

Sub main() Dim total as Double total = SumMinus(5, 4, 3) End Sub

Hu rau VBA txheej txheem "Function" los ntawm daim ntawv ua haujlwm

Cov txheej txheem VBA muaj nuj nqi tuaj yeem raug hu los ntawm Excel daim ntawv ua haujlwm tib yam li lwm yam ua haujlwm hauv Excel. Yog li ntawd, cov txheej txheem tsim nyob rau hauv qhov piv txwv yav dhau los muaj nuj nqi - Summinus tuaj yeem raug hu los ntawm kev nkag mus rau cov lus qhia hauv qab no rau hauv daim ntawv ua haujlwm ntawm tes:

=SumMinus(10, 5, 2)

VBA txheej txheem "Sub"

VBA editor nkag siab tias muaj cov txheej txheem ua ntej nws subthaum nws ntsib ib pawg ntawm cov lus txib uas nyob nruab nrab ntawm cov lus qhib thiab kaw hauv qab no:

Sub...End Sub

Cov txheej txheem VBA "Sub": Piv txwv 1. Kev hloov pauv hauv nruab nrab thiab qhov loj me ntawm font hloov nyob rau hauv ib qho kev xaiv ntawm cov cell

Xav txog ib qho piv txwv ntawm tus txheej txheem VBA yooj yim sub, uas nws txoj hauj lwm yog los hloov cov formatting ntawm cov xaiv ntau yam ntawm tes. Cov hlwb yog nyob nruab nrab (ob leeg vertically thiab kab rov tav) thiab cov font loj hloov mus rau tus neeg siv tshwj xeeb:

Sub Format_Centered_And_Sized(Optional iFontSize As Integer = 10) Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Size = iFontSize End Sub

Cov txheej txheem no sub ua cov yeeb yam tab sis tsis rov qab los.

Qhov piv txwv no kuj siv ib qho kev sib cav xaiv FontSize. Yog qhov kev sib cav FontSize tsis dhau mus rau txheej txheem sub, ces nws lub neej ntawd tus nqi yog 10. Txawm li cas los, yog hais tias qhov kev sib cav FontSize dhau mus rau txheej txheem sub, ces qhov xaiv ntau ntawm cov hlwb yuav raug teem rau font loj teev los ntawm tus neeg siv.

VBA Sub Txheej Txheem: Piv txwv 2: Nruab Nruab Nruab Nruab Nruab Nrab thiab Bold Font hauv Cov Txheej Txheem Xaiv

Cov txheej txheem hauv qab no zoo ib yam li ib qho uas nyuam qhuav tham, tab sis lub sijhawm no, es tsis txhob resizing, nws siv cov font style bold rau cov xaiv ntawm cov cell. Qhov no yog ib qho piv txwv txheej txheem sub, uas yuav tsis muaj kev sib cav:

Sub Format_Centered_And_Bold() Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Bold = True End Sub

Hu rau "Sub" txheej txheem hauv Excel VBA

Hu rau VBA txheej txheem "Sub" los ntawm lwm tus txheej txheem

Hu rau tus txheej txheem VBA sub los ntawm lwm tus txheej txheem VBA, koj yuav tsum sau lo lus tseem ceeb Hu rau, txheej txheem npe sub thiab ntxiv rau hauv kab lus yog cov lus sib cav ntawm cov txheej txheem. Qhov no yog qhia hauv qhov piv txwv hauv qab no:

Sub main() Hu Format_Centered_And_Sized(20) End Sub

Yog tus txheej txheem Format_Centered_And_Sized muaj ntau tshaj ib qho kev sib cav, lawv yuav tsum tau muab cais los ntawm commas. Zoo li no:

Sub main() Call Format_Centered_And_Sized(arg1, arg2, ...) End Sub

Hu rau VBA txheej txheem "Sub" los ntawm daim ntawv ua haujlwm

Tus txheej txheem sub tsis tuaj yeem nkag ncaj qha rau hauv Excel daim ntawv xovtooj, raws li tuaj yeem ua tiav nrog cov txheej txheem muaj nuj nqivim txoj kev sub tsis rov qab tus nqi. Txawm li cas los xij, cov txheej txheem sub, uas tsis muaj kev sib cav thiab tau tshaj tawm tias Public (raws li qhia hauv qab no) yuav muaj rau cov neeg siv ntawm daim ntawv ua haujlwm. Yog li, yog cov txheej txheem yooj yim tau tham saum toj no sub muab tso rau hauv ib qho module hauv Visual Basic Editor, tus txheej txheem Format_Centered_And_Bold Yuav muaj rau siv hauv Excel daim ntawv ua haujlwm, thiab cov txheej txheem Format_Centered_And_Sized - yuav tsis muaj vim nws muaj kev sib cav.

Ntawm no yog ib txoj hauv kev yooj yim los khiav (lossis ua) ib txoj haujlwm sub, nkag tau los ntawm daim ntawv ua haujlwm:

  • Xovxwm Alt + F8 (nias qhov tseem ceeb Alt thiab thaum tuav nws cia, nias tus yuam sij F8).
  • Hauv daim ntawv teev cov macro uas tshwm sim, xaiv qhov koj xav khiav.
  • Xovxwm khiav (khiav)

Txhawm rau ua tus txheej txheem sub sai thiab yooj yim, koj tuaj yeem muab cov keyboard shortcut rau nws. Rau qhov no:

  • Xovxwm Alt + F8.
  • Hauv daim ntawv teev cov macros uas tshwm sim, xaiv qhov koj xav muab cov keyboard shortcut rau.
  • Xovxwm tsis (Kev xaiv) thiab hauv lub dialog box uas tshwm sim, nkag mus rau cov keyboard shortcut.
  • Xovxwm OK thiab kaw lub dialog Macro (Macro).

xim: Thaum muab cov keyboard shortcut rau macro, nco ntsoov tias nws tsis siv raws li tus qauv hauv Excel (piv txwv li, Ctrl + C). Yog tias koj xaiv ib qho keyboard shortcut uas twb muaj lawm, nws yuav raug muab rov qab rau hauv macro, thiab vim li ntawd, tus neeg siv yuav pib lub macro los ntawm kev sib tsoo.

VBA txheej txheem Scope

Ntu 2 ntawm qhov kev qhia no tau tham txog qhov kev hloov pauv thiab qhov tsis tu ncua thiab lub luag haujlwm ntawm cov lus tseem ceeb. Public и private. Cov ntsiab lus tseem ceeb no tuaj yeem siv nrog VBA cov txheej txheem:

Public Sub AddToCells(i As Integer)... End Sub
Yog hais tias tus txheej txheem tshaj tawm yog ua ntej los ntawm lo lus tseem ceeb Public, ces cov txheej txheem yuav muaj rau tag nrho cov modules nyob rau hauv qhov project VBA.
Private Sub AddToCells(i As Integer)... End Sub
Yog hais tias tus txheej txheem tshaj tawm yog ua ntej los ntawm lo lus tseem ceeb private, ces cov txheej txheem no tsuas yog muaj rau cov module tam sim no. Nws tsis tuaj yeem hu thaum nyob hauv lwm qhov module lossis los ntawm Excel phau ntawv ua haujlwm.

Nco ntsoov tias yog ua ntej tshaj tawm cov txheej txheem VBA muaj nuj nqi or sub lo lus tseem ceeb tsis tau muab tso, lub neej ntawd khoom yog teem rau tus txheej txheem Public (uas yog, nws yuav muaj nyob txhua qhov chaw hauv VBA qhov project). Qhov no yog qhov sib piv rau cov lus tshaj tawm sib txawv, uas yog lub neej ntawd private.

Thaum ntxov tawm ntawm VBA cov txheej txheem "Function" thiab "Sub"

Yog tias koj xav tau txiav tawm qhov ua tiav ntawm VBA txheej txheem muaj nuj nqi or sub, tsis tau tos rau nws lub ntuj xaus, ces rau qhov no muaj cov tswv Tawm Function и Tawm Sub. Kev siv cov neeg ua haujlwm no tau qhia hauv qab no siv cov txheej txheem yooj yim ua piv txwv. muaj nuj nqiIb qho uas cia siab tias yuav tau txais kev sib cav zoo los ua haujlwm ntxiv. Yog tias tus nqi tsis zoo dhau mus rau tus txheej txheem, ces tsis muaj kev ua haujlwm ntxiv tuaj yeem ua tau, yog li tus neeg siv yuav tsum tau qhia cov lus yuam kev thiab cov txheej txheem yuav tsum tawm tam sim:

Function VAT_Amount(sVAT_Rate As Single) As Single VAT_Amount = 0 Yog tias sVAT_Rate <= 0 Ces MsgBox "Tshaj tawm tus nqi zoo ntawm sVAT_Rate tab sis tau txais" & sVAT_Rate Exit Function End Yog ... Xaus Ua Haujlwm

Thov nco ntsoov tias ua ntej ua tiav cov txheej txheem muaj nuj nqi - VAT_Amount, built-in VBA muaj nuj nqi yog muab tso rau hauv cov cai Msgbox, uas qhia cov lus ceeb toom popup rau tus neeg siv.

Sau ntawv cia Ncua