VBA - Pesimien makrot
VBA - Pesimien makrot
comesittely
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