VBA - pesitsevate makrode kasutamine

VBA - pesitsevate makrode kasutamine

com

Sissejuhatus

Makromajandusest teise helistamiseks võib kasutada mitmeid meetodeid (sõltuvalt sellest, kas teie helistate alam- või funktsioonile). Lisaks peate sündmuste protseduuride käsitlemisel või protseduurilt teise töövihiku puhul erilist tähelepanu pöörama.

Sub-alale helistamine Sub

    • Ilma parameetriteta
    • Parameetritega
  • Funktsioonide helistamine alamprogrammist
  • Funktsioonilt funktsiooni helistamine
    • Vahemuutuja kasutamine
    • Ilma vahepealse muutuja kasutamata:
  • Ürituse protseduuri kutsumine
    • Kõne avaldusega
    • Funktsioon CallByName
  • Helistage protseduurile teises töövihikus
    • Helistamine alamale
    • Funktsioonile helistamine

Ilma parameetriteta

Mõlemad Subs on samas moodulis ja neil pole parameetreid. Macro2 kutsub Macro1:

 Sub Macro1 () MsgBox "Tere maailm!" Lõpeta sub-sub-makro2 () Call Macro1 End Sub 

Kui te ei soovi kõne avaldust kasutada:

 Sub Macro1 () MsgBox "Tere maailm!" Lõpu alam-sub-makro2 () Macro1 lõpp-alam 

Seda ei soovitata siiski, kuna kõne avaldus muudab koodi palju loetavamaks.

Kui Subs on erinevates moodulites ja neil ei ole parameetreid, ei ole vaja moodulit täpsustada. Kuid siiski peate mõtlema oma koodi säilitamisele. Märgistades, millist moodulit kasutate, säästate oma koodi silumisega väärtuslikku aega. Seega, kui Macro1 on moodulis 2 ja moodulis 2:

 Sub Macro1 () MsgBox "Tere maailm!" Lõpu alam-sub-makro2 () Helistage moodulile 1.Macro1 End Sub 

Parameetritega

Meetod on identne. Lihtsalt lisage sulgudesse parameetrid:

Kõne avaldusega

 Alammakro1 (Nb1 nii pikk, Nb2 kui pikk) Vahemik ("A1") = Nb1 vahemik ("A2") = Nb2 lõpp-sub-sub-makro2 () Call Macro1 (18254, 654897) Lõpeta alam 

Ilma kõne avalduseta

 Alammakro1 (Nb1 nii pikk, Nb2 kui pikk) Vahemik ("A1") = Nb1 vahemik ("A2") = Nb2 lõpp-sub-sub-Macro2 () Macro1 18254321, 654897 Lõpeta alam 

Kui makrod asuvad erinevates moodulites:

 Sub Macro2 () Helista moodulile 1.Macro1 (918254321, 654897) Lõpeta alam 

Funktsioonide helistamine alamprogrammist

Mis on funktsioon? Mis eristab funktsiooni Sub-st? Funktsioon on käsk, mis tagastab väärtuse, mis põhineb konkreetsetel parameetritel. Alam on ka käsk, mis sõltub parameetritest (kui neid on), kuid see ei tagasta mingit väärtust.

Funktsiooninäide:

 Funktsioonide lisamine (Nb1 kui kahekordne, Nb2 kui kahekordne) kui topeltlisand = Nb1 + Nb2 lõppfunktsioon 

Selles näites on funktsioon deklareeritud kui "kahekordne" (see tüübi deklaratsioon on valikuline). Arvestades, et funktsioon tagastab väärtuse, peate esitama selle väärtuse salvestamise Sub-kõnes. See võib olla kas Excel-rakk, muutuja, kontroll jne.

 Sub Macro2 () Dim Somme As Double Somme = Lisa (1234.56, 654.32) MsgBox Somme lõpp-allfunktsiooni lisamine (Nb1 kui topelt, Nb2 kahekordne) topeltlisandina = Nb1 + Nb2 lõppfunktsioon 

Nb: sulgudes suletud ja komadega eraldatud parameetrid.

Funktsioonilt funktsiooni helistamine

Me kasutame sama põhimõtet!

Vahemuutuja kasutamine

Selles näites salvestame tulemuse vahesuuruses:

 Sub Macro2 () Dim Somme nagu Double Somme = Lisa (1234.56, 654.32) MsgBox Somme lõpp-alamfunktsiooni lisamine (Nb1 kahekordse, Nb2 kahekordse kujul) kahekordse diameetriga VarNb kui topeltvariandina = multiplieParDeux (Nb2) lisamine = Nb1 + varNb-lõpp Funktsioon MultiplieParDeux (Nb kui kahekordne) kui topeltkordneParDeux = Nb * 2 lõppfunktsioon 

Ilma vahepealse muutuja kasutamata:

 Sub Macro2 () Dim Somme as Double Somme = lisamine (1234.56, 654.32) MsgBox Somme lõpp-allfunktsiooni lisamine (Nb1 kui topelt, Nb2 kahekordne) topeltlisandina = Nb1 + mitmekordneParDeux (Nb2) Lõppfunktsiooni funktsioon MultiplieParDeux (Nb kui kahekordne) Kahekordse korrutisenaParDeux = Nb * 2 Lõppfunktsioon 

Ürituse protseduuri kutsumine

Mis on sündmusprotseduur? Sündmuste protseduur on avaldus, mis aktiveeritakse automaatselt, kui kasutaja suhtleb konkreetse objektiga. Objekt võib olla kas leht, töövihik, kontroll ... Näited sündmustest: töövihiku avamine või sulgemine, lehe muutmine, loendi valimine, kontrollimine jne.

Näide:

Kasutaja muudab lahtri A1 väärtust: "pas mal" kuvatakse B1-s, kui A1 on suurem kui 10.

=== Rakendamine: ====

  • Valige leht
  • Paremklõpsake lehelehel / Vaata koodi.
  • Sisestage koodiaknas järgmine:

 Privaatne alamtööleht_Vahetus (ByVal Target As Range) „Si la cellule problemée para muutus“ A1 => Quitte Kui Target.Address "$ A $ 1" Siis Välju Sub 'Si la cellule (donc A1) est> 10 kohat "Pas mal!" et B1 Kui Target.Value> 10 Siis Target.Offset (0, 1) = "Pas mal!" Else Target.Offset (0, 1) = "Pas kohutav!" Lõpeta alam 

Kõne avaldusega

Kui kutsutud protseduur on samas moodulis kui teie sündmuse toiming:

 Privaatne alamtööleht_Vahetus (ByVal Target As Range) „Si la cellule problemée para muutus“ A1 => Quitte Kui Target.Address "$ A $ 1" Siis Välju Sub 'Si la cellule (donc A1) est> 10 kohat "Pas mal!" et B1 Kui Target.Value> 10 Siis Target.Offset (0, 1) = "Pas mal!" Else Target.Offset (0, 1) = "Pas kohutav!" Alam-sub-alam-subMMroro () Dim monRange as Range Set monRange = Lehed ("Feuil1"). Vahemik ("A1") Kõne tööleht_Muuda (monRange) Lõpeta 

Miinused, kui helistamisprotseduur ei ole samas moodulis, saate järgmise vea:

  • Koosta viga: alam- või funktsiooni määratlemata

VBA ei pääse sündmuse protseduurile juurde. Selle kõrvaldamiseks:

Funktsioon CallByName

Süntaks: CallByName (Objet, NomProcédure, TypeAppel, Args ())
  • Objet: Nõutav. Objekti tüübist. Määrab protseduuriga seotud objekti.
  • NomProcédure: Nõutav. String. Kutsutud protseduuri nimi.
  • TypeAppel: Nõutav. CallType: meetod, Set, Let või Get.
  • Args (): Vabatahtlik. Parameetrid, mis edastatakse kutsutud funktsioonile.

Meie näites paigutame maMacro moodulis 1 ja proovime helistada töölehele. Kuid kõigepealt on vaja deklareerida meie sündmuse protseduur (kui seda kuulutatakse privaatseks, ei saa seda moodulis kasutada).

 Sub Worksheet_Change (ByVal Target As Range) „Si la cellule problemée para muutus” A1 => Quitte Kui Target.Address "$ A $ 1" Siis Välju Sub 'Si la cellule (donc A1) est> 10 kohad "Pas mal!" et B1 Kui Target.Value> 10 Siis Target.Offset (0, 1) = "Pas mal!" Else Target.Offset (0, 1) = "Pas kohutav!" Lõpeta alam 

Nüüd asetage MyMacro Sub moodulis 2.

 Sub MaMacro () Dim monRange kui vahemiku komplekti monRange = lehed ("Feuil1"). Range ("A1") CallByName töölehed ("Feuil1"), "Tööleht_Muuda", VbMethod, monRange Lõpeta alam 

Veel üks näide:

Kui klõpsate nuppu UserForm (UserForm2), käivitage Combobox1_Change sündmus UserForm1-s ...

 Private Sub CommandButton1_Click () CallByName UserForm1, "ComboBox1_Change", VbMethod Lõpeta 

Helistage protseduurile teises töövihikus

Me kasutame Run meetodit. See täpsustatakse, sealhulgas töövihik, mis sisaldab kutsutud protseduuri ja protseduuri nime.

Helistamine alamale

Juhtum 1: fail on juba avatud. Sellisel juhul ei ole vaja määrata teed:

 Sub TestRun () Application.Run "Classeur1.xlsm"! Moodul2.Macro2 "Lõpeta alam 

2. juhtum: fail on suletud. Sellisel juhul tuleb täpsustada kogu tee:

 Sub TestRun () Application.Run "C: kasutajad franck Desktop Classeur1.xlsm '! Module2.Macro2" Lõpeta alam 

Funktsioonile helistamine

Sama töövihiku funktsioonile helistamisel on vaja tagastatud väärtuse salvestamiseks muutujat. Muutuja. Samuti peame edastama kõik funktsioonile edastatavad parameetrid helistatavast Sub.

Kasutame lisafunktsiooni, mis asub Classeur1.xlsm'is:

 Funktsioonide lisamine (Nb1 kui kahekordne, Nb2 kui kahekordne) kui topeltlisand = Nb1 + Nb2 lõppfunktsioon 

Meie põhiprotseduuri [Principale ()] helistamiseks töövihikus [Classeur2.xlsm] on meil vaja järgmist koodi:

Tööraamat on juba avatud

 Sub Principale () Dim Somme Nagu Double Somme = Run ("'Classeur1.xlsm'! Module2.Addition", 1234.56, 654.32) MsgBox Somme End Sub 

Tööraamat on suletud

 Sub Principale () Dim Somme Nagu Double Somme = Käivita ("C: Kasutaja frank Desktop Classeur1.xlsm '! Module2.Addition", 1234.56, 654.32) MsgBox Somme lõppu 

NB! Kui teie töövihik suleti varem, avaneb see pärast makro täitmist. Ärge unustage seda uuesti sulgeda ... kasutades koodi!

 Sub TestRun () Dim Somme Nagu Double Somme = Run ("'Classeur1.xlsm'! Module2.Addition", 1234.56, 654.32) Tööraamatud ("Classeur1.xlsm"). Sulge vale MsgBox Somme lõppu 
Eelmine Artikkel Järgmine Artikkel

Top Näpunäited