Excel VBA ByRef -funktion argumentti
VBA: n ByRef on funktio, jota kutsutaan viitteenä, jossa annamme viitteen kaikkiin koodissamme oleviin argumentteihin, kun teemme mukautettuja toimintoja ja haluamme käyttää minkä tahansa muuttujan arvoa, joka on määritelty aiemmin ennen ByRef-funktiota, syntaksin käyttö on yksinkertaista kuin Function Function-Name (ByRef Variable as Data Type).
Byrefiä käyttämällä voimme osoittaa alkuperäisen muuttujan arvon muuttamatta muuttujan arvoa. Tämä on kuin muuttujan arvon välittäminen suoraan VBA-alimenettelylle tai VBA-funktiolle.
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function.png.webp)
Kuinka välittää argumentti VBA ByRef -argumentilla?
Esimerkki 1
Katso esimerkiksi alla olevaa VBA-koodia.
Koodi1:
Alimenettely1 () Dim k kuten kokonaisluku k = 50 Menettely2 k MsgBox k End Sub
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_2.png.webp)
Koodi2:
Alimenetelmä 2 (ByRef k kokonaislukuna) k = k + 10 loppuosa
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_3.png.webp)
Ensimmäisessä menettelyssä olen ilmoittanut muuttujan "k" kokonaisluvuksi.
Sitten olen määrittänyt tälle muuttujalle arvon 50.
Sen jälkeen olen lisännyt uuden rivin eli
Menettely2 k
Tämä on toinen menettelynimi. Tässä menettelyssä olen ilmoittanut sulkeissa olevan muuttujan merkkijonoksi VBA: ssa, mutta olen käyttänyt sanaa "ByRef".
ByRef k kokonaislukuna
Tässä olen määrittänyt muuttujan ”k” arvon arvoksi
k = k + 10
Ok, nyt suoritan koodin vaihe vaiheelta painamalla F8-näppäintä.
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_4.png.webp)
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_5.png.webp)
Paina F8-näppäintä vielä kaksi kertaa ja vie kohdistin muuttujan "k" päälle nähdäksesi muuttujan "k" arvon.
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_6.png.webp)
Koska olemme määrittäneet arvoksi 50, se näyttää arvon 50. Nyt se on korostanut rivin Procedure2 k, joka on toinen menettelynimi.
Jos painan F8-näppäintä nyt, se siirtyy nykyisestä menettelystä ja siirtyy toiseen menettelyyn.
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_7.png.webp)
Koska olemme käyttäneet ByRef-sanaa, se kantoi muuttujan "k" arvon edellisestä menettelystä.
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_8.png.webp)
Paina F8-näppäintä kahdesti. Se palaa edelliseen alimenettelyyn. Jos huomaat toisessa menettelyssä, olen käyttänyt kaavaa muodossa k = k + 10. eli "k" -arvo on 50 ja lisää sitten 10: ää enemmän, eli yhteensä 60.
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_9.png.webp)
Nyt koodi on käynnissä ensimmäisessä menettelyssä, ja tässä menettelyssä muuttujan "k" arvo on 50. Mutta paina F8-näppäintä ja katso tulos viestiruudussa.
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_10.png.webp)
Saimme tulokseksi 60 tämän menettelyn oletusarvon 50 sijaan.
Syy miksi saimme 60, koska toisessa menettelyssä olemme käyttäneet "ByRef" -toimintoa, joten se vei yhtälötuloksen (k = k + 10) nykyiseen menettelyyn.
Tässä ensimmäisen muuttujan “k” arvo on 50 ja toisessa menettelyssä muuttujan “k” arvo on k + 10 eli 60, joka viedään ensimmäiseen menettelyyn.
Ensimmäisessä menettelyssä muuttujan ”k” alkuperäinen arvo oli 50, joten By on muuttanut alkuperäisen arvon 50: stä 60: een suorittamalla yhtälön k = k + 10 eli k = 50 +10 = 60.
Esimerkki 2
Katso nyt vielä yksi esimerkki.
Koodi 1:
Ala P1 () Himmennä Oma numero niin kauan Oma numero = 1 Soita muutos_ByRef (Oma numero) 'Oman numeroni muuttuu Change_ByRef-menettelyllä MsgBox "Oma numero on nyt:" & Oma numero loppu
Koodi 2:
Alimuutos_ByRef (ByRef NewNumber niin pitkä) NewNumber = 14 End Sub
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_12.png.webp)
Tämä toimii täsmälleen samalla tavalla kuin edellinen koodi.
Aluksi muuttujan ”Oma numero” arvo on 1. Sitten kutsutaan alla olevaa menettelyä sen nimellä
Soita Change_ByRef (Oma numero)
Tässä menettelyssä muuttujan arvo on 14.
Joten, kun se palaa edelliseen menettelyyn, se määrittää muuttujalle uuden arvon 14.
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_13.png.webp)