VBA - Pesimien makrot

VBA - Pesimien makrot

com

esittely

Makroa voidaan kutsua toisesta lähestymistavasta useista eri tavoista (riippuen siitä, soittaako Sub tai toiminto). Lisäksi sinun on kiinnitettävä erityistä huomiota tapahtumien käsittelyssä tai kutsumalla menettelyä toisesta työkirjasta.

Sub: n soittaminen aliverkosta

    • Ilman parametreja
    • Parametreilla
  • Toiminnon kutsuminen aliohjelmasta
  • Toiminnon kutsuminen toiminnosta
    • Välimuuttujan käyttäminen
    • Ilman välimuuttujaa:
  • Soita tapahtumaprosessiin
    • Puheluilmoituksen avulla
    • CallByName-toiminto
  • Soita menettely toiseen työkirjaan
    • Soitto Sub
    • Toiminnon kutsuminen

Ilman parametreja

Sekä Subs ovat samassa moduulissa ja niillä ei ole parametreja. Macro2 kutsuu Macro1:

 Sub Macro1 () MsgBox "Hei maailma!" Lopetus Sub Sub Makro2 () Soita Macro1 End Sub 

Jos et halua käyttää puheluilmoitusta:

 Sub Macro1 () MsgBox "Hei maailma!" Lopetus Sub Sub Makro2 () Macro1 End Sub 

Sitä ei kuitenkaan suositella, koska puheluilmoitus tekee koodista helpommin luettavissa.

Kun Subs on eri moduuleissa ja sillä ei ole parametreja, moduulia ei tarvitse määrittää. Mutta silti sinun täytyy miettiä koodin ylläpitoa. Kun osoitat, mikä moduuli on käytössä, säästät arvokasta aikaa koodin virheenkorjauksessa. Joten jos Macro1 on moduulissa 2 ja moduulissa 2:

 Sub Macro1 () MsgBox "Hei maailma!" Lopetus Sub Sub Makro2 () Soita moduuliin1.Macro1 End Sub 

Parametreilla

Menetelmä on identtinen. Lisää vain suluissa olevat parametrit:

Puheluilmoituksen avulla

 Sub Macro1 (Nb1 yhtä pitkä, Nb2 yhtä pitkä) Alue ("A1") = Nb1-alue ("A2") = Nb2: n loppupään alivaihtoehto Makro2 () Soita Macro1 (18254, 654897) 

Ilman puheluilmoitusta

 Sub Macro1 (Nb1 yhtä pitkä, Nb2 yhtä pitkä) Alue ("A1") = Nb1-alue ("A2") = Nb2: n loppupään alivaihtoehto Macro2 () Macro1 18254321, 654897 

Jos makrot ovat eri moduuleissa:

 Sub Macro2 () Soita moduuliin1.Macro1 (918254321, 654897) Lopeta al 

Toiminnon kutsuminen aliohjelmasta

Mikä on toiminto? Mikä erottaa toiminnon Sub: stä? Toiminto on ohje, joka palauttaa arvon, joka perustuu tiettyihin parametreihin. Sub on myös ohje, joka riippuu parametreista (jos sellaisia ​​on), mutta se ei palauta mitään arvoa.

Esimerkki toiminnosta:

 Toiminnon lisäys (Nb1 kaksois-, Nb2-kaksoisasennuksena) kaksoislisäksi = Nb1 + Nb2-lopputoiminto 

Tässä esimerkissä toiminto ilmoitetaan "kaksinkertaisena" (tämä tyyppi-ilmoitus on valinnainen.) Palautettu arvo on kaksoistyyppinen. Koska funktio palauttaa arvon, sinun on annettava tämän arvon tallennus kutsuvaan Sub. Tämä voi olla joko Excel-solu, muuttuja, ohjaus jne.

 Sub Macro2 () Dim Somme As Double Somme = Lisäys (1234.56, 654.32) MsgBox Somme End -alifunktion lisäys (Nb1 kaksinkertaisena, Nb2 kaksinkertaisena) kaksoislisänä = Nb1 + Nb2-lopputoiminto 

Nb: sulkeissa olevat ja pilkuilla erotetut parametrit.

Toiminnon kutsuminen toiminnosta

Käytämme samaa periaatetta!

Välimuuttujan käyttäminen

Tässä esimerkissä tallennamme tuloksen välimuuttujaan:

 Sub Macro2 () Dim Somme As Double Somme = Lisäys (1234.56, 654.32) MsgBox Somme End -alifunktion lisäys (Nb1 kaksois-, Nb2-kaksoisverkkona) Double Double -versio (Nb2) Lisäys = Nb1 + VarNb-lopputoiminto Toiminto MultiplieParDeux (Nb: Double) kaksinkertaisena moninkertaisenaParDeux = Nb * 2: n päätoiminto 

Ilman välimuuttujaa:

 Sub Macro2 () Dim Somme As Double Somme = Lisäys (1234.56, 654.32) MsgBox Somme End -alifunktion lisäys (Nb1: Double, Nb2: Double) Double-lisäykseksi = Nb1 + MultiplieParDeux (Nb2) Päätoiminto Toiminto MultiplieParDeux (Nb: Double) Double MultiplieParDeux = Nb * 2 End -toiminto 

Soita tapahtumaprosessiin

Mikä on tapahtumaprosessi? Tapahtumaprosessi on lausunto, joka aktivoituu automaattisesti, kun käyttäjä on vuorovaikutuksessa tietyn kohteen kanssa. Objekti voi olla joko arkki, työkirja, ohjaus ... Esimerkkejä tapahtumista: työkirjan avaaminen tai sulkeminen, muutosarkki, luettelon valitseminen, ohjauksen kirjoittaminen jne.

Esimerkki:

Käyttäjä muuttaa solun A1 arvoa: "pas mal" näkyy B1: ssä, jos A1 on suurempi kuin 10.

=== Toteutus: ====

  • Valitse arkki
  • Napsauta hiiren kakkospainikkeella arkin välilehteä / Näytä koodi.
  • Lisää koodiikkunassa seuraava:

 Yksityinen alitehtävä_Vaihda (ByVal Target As Range) 'Si la cellule worée par le changement n'a pas pour adresse A1 => Quitte Jos Target.Address "$ A $ 1" ja sitten Poistu alisivulta Si la cellule (donc A1) est> 10 alors paikan päällä "Pas mal!" fi B1 Jos Target.Value> 10 Sitten Target.Offset (0, 1) = "Pas mal!" Else Target.Offset (0, 1) = "Pas kauhea!" Lopeta Sub 

Puheluilmoituksen avulla

Jos soitettu menettely on samassa moduulissa kuin tapahtumaprosessissasi:

 Yksityinen alitehtävä_Vaihda (ByVal Target As Range) 'Si la cellule worée par le changement n'a pas pour adresse A1 => Quitte Jos Target.Address "$ A $ 1" ja sitten Poistu alisivulta Si la cellule (donc A1) est> 10 alors paikan päällä "Pas mal!" fi B1 Jos Target.Value> 10 Sitten Target.Offset (0, 1) = "Pas mal!" Else Target.Offset (0, 1) = "Pas kauhea!" Loppu-alivaihtoehto MaMacro () Dim monRange -toimialueen asetussarja monRange = Levyt ("Feuil1") Alue ("A1") Soita työarkki_Vaihda (monRange) Lopeta aloitus 

Huomautuksia vastaan, jos soittomenettely ei ole samassa moduulissa, saat seuraavan virheen:

  • Käännä virhe: Sub tai Function ei ole määritetty

VBA ei pysty käyttämään tapahtumaprosessia. Korjaa tämä:

CallByName-toiminto

Syntaksi: CallByName (Objet, NomProcédure, TypeAppel, Args ())
  • Objet: Pakollinen. Objektityypistä. Määrittää menettelyyn osallistuvan kohteen.
  • NomProcédure: Pakollinen. Merkkijono. Soitetun menettelyn nimi.
  • TypeAppel: Pakollinen. CallType: Menetelmä, Set, Let tai Get.
  • Args (): Valinnainen. Parametrit, jotka siirretään kutsutulle funktiolle.

Esimerkissämme asetamme maMacron moduuliin 1 ja yritämme soittaa Worksheet_Change Sub. Mutta ensinnäkin on tarpeen ilmoittaa tapahtumaprosessimme (kun se julistetaan yksityiseksi, sitä ei voi käyttää moduulissa).

 Sub Worksheet_Change (ByVal Target As Range) 'Si la cellule problemée par le changement n'a pas pour adresse A1 => Quitte Jos Target.Address "$ A $ 1" Sitten Lopeta Sub' Si la cellule (donc A1) est> 10 alors paikan päällä "Pas mal!" fi B1 Jos Target.Value> 10 Sitten Target.Offset (0, 1) = "Pas mal!" Else Target.Offset (0, 1) = "Pas kauhea!" Lopeta Sub 

Aseta MyMacro Sub -moduuli nyt moduuliin 2.

 Sub MaMacro () Dim monRange Asetusalueena monRange = Levyt ("Feuil1"). Alue ("A1") CallByName-työarkit ("Feuil1"), "Työarkki_Vaihda", VbMethod, monRange End Sub 

Toinen esimerkki:

Napsauttamalla UserFormissa (UserForm2) olevaa painiketta, käynnistä Combobox1_Change-tapahtuma UserForm1: ssä ...

 Yksityinen alikomentoButton1_Click () CallByName UserForm1, "ComboBox1_Change", VbMethod End Sub 

Soita menettely toiseen työkirjaan

Käytämme Run-menetelmää. Se määritellään, mukaan lukien työkirja, joka sisältää kutsutun menettelyn ja menettelyn nimen.

Soitto Sub

Tapaus 1: Tiedosto on jo auki. Tällöin polkua ei tarvitse määrittää:

 Sub TestRun () -sovellus.Run "'Classeur1.xlsm'! Module2.Macro2" End Sub 

Tapaus 2: Tiedosto on suljettu. Tässä tapauksessa koko polku on määritettävä:

 Sub TestRun () -sovellus.Run "'C: Käyttäjät franck Desktop Classeur1.xlsm'! Module2.Macro2" Lopeta aloitus 

Toiminnon kutsuminen

Kun soitat samaa työkirjaa koskevasta toiminnosta, tarvitset muuttujan palautetun arvon tallentamiseksi. Muuttuja. Meidän on myös ilmoitettava kaikki parametrit, jotka siirretään funktiolle soittavasta Sub.

Käytämme Classeur1.xlsm: ssä olevaa lisätoimintoa:

 Toiminnon lisäys (Nb1 kaksois-, Nb2-kaksoisasennuksena) kaksoislisäksi = Nb1 + Nb2-lopputoiminto 

Tarvitsemme seuraavan koodin, jos haluat kutsua pääkäyttäjän [Principale ()] työkirjasta [Classeur2.xlsm].

Työkirja on jo avattu

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

Työkirja on suljettu

 Sub Principale () Dim Somme Kuten Double Somme = Suorita ("C: Käyttäjät franck Desktop Classeur1.xlsm '! Module2.Addition", 1234.56, 654.32) MsgBox Somme End Sub 

Huom. Jos työkirja on aiemmin suljettu, se avautuu makron suorittamisen jälkeen. Muista siis sulkea se uudelleen ... käyttämällä koodia!

 Sub TestRun () Dim Somme As Double Somme = Suorita ("'Classeur1.xlsm'! Module2.Addition", 1234.56, 654.32) Työkirjat ("Classeur1.xlsm") Sulje False MsgBox Somme End Sub 
Edellinen Artikkeli Seuraava Artikkeli

Top Vinkkejä