Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Visual Basic - odovzdávanie argumentov hodnotou

Ahoj, prosím o poradenie, čo robím zle:

volám procedúru Zobraz, pričom do nej odovzdávam hodnotu "Bratislava":

Sub Pokus()
Zobraz ("Bratislava")
End Sub

hodnotu "Bratislava" preberám do procedúry Zobraz ako premennú Mesto:

Sub Zobraz(Mesto)
MsgBox Mesto
End Sub

Zatiaľ to ide, ale keď chcem odovzdať dve hodnoty, pripravím procedúru Zobraz nasledovne:

Sub Zobraz(Mesto1, Mesto2)
MsgBox Mesto1
MsgBox Mesto2
End Sub

ale pri volaní:

Sub Pokus()
Zobraz ("Bratislava", "Košice")
End Sub

mi Visual Basic označí riadok Zobraz ("Bratislava", "Košice") červenou sa dá hlášku : Compile Error, Expected: =

pričom nechápem, kde sa očakáva "=" a čím ďalej doplniť, keďže pri jednom argumente poslúchal bez odvrávania ;)

Předmět Autor Datum
• Zobraz ("Bratislava" & "Košice"), kdyby slo o neco deklarovaného tak bez "", s "" se ti zobrazi je…
CoCoChanel 25.03.2015 09:46
CoCoChanel
Nefunguje... premenné nemám deklarované a úvodzovky tam mať musím, keďže chcem, aby mi procedúra Zo…
robert13 25.03.2015 09:53
robert13
• Nevim ceho chces presne docilit ale myslis? Dim Zobraz As String = MsgBox("Bratislava") & MsgBox…
CoCoChanel 25.03.2015 10:01
CoCoChanel
Zobraz nie je premenná ale procedúra! Mám mnoho procedúr, v ktorých nastavujem hodnoty, ktoré potom…
robert13 25.03.2015 10:08
robert13
VBA nepodporuje overloading funkcí v takové podobě, jaká je známá u pokročilejších jazyků. Nicméně n…
Wikan 25.03.2015 10:00
Wikan
ďakujem, niečo som z toho, čo som pochopil dedukciou, odskúšal, zatiaľ bezvýsledne, ale nejde mi do…
robert13 25.03.2015 10:29
robert13
Více argumentů funguje. Nefunguje, když tam máš více stejně pojmenovaných funkcí.
Wikan 25.03.2015 10:30
Wikan
::) ale ja nemám viac rovnako pomenovaných funkcií...
robert13 25.03.2015 10:32
robert13
OK, z toho tvého popisu to tak ale vypadalo. Zkus to volat takhle: Zobraz "Bratislava", "Košice"
Wikan 25.03.2015 10:36
Wikan
ja som mal Zobraz ("Bratislava", "Košice"), t.j. odosielam dva argumenty, ktoré si má procedúra Zobr…
robert13 25.03.2015 10:46
robert13
Jupííííí, máš pusu na čelo!!! Tak to sa divím... predávané hodnoty sa nevymenovávajú v zátvorkách?!?…
robert13 25.03.2015 10:51
robert13
Kdyz volas funkci, pouzivaji se zavorky. Kdyz volas proceduru, je to bez zavorek. Proc? Protoze Basi…
Jan Fiala 25.03.2015 18:14
Jan Fiala
Vyznam deklarovania poznam, je fakt, ze ho nezvyknem pouzivat inokedy, nez ked potrebujem platnost v…
robert13 26.03.2015 15:37
robert13
Díky moc klucí, trápilo mě to dlouho a úplně náhodou jsem narazil na vaše příspěvky. Taky jsem nevě… poslední
fabin 01.07.2016 13:52
fabin
tu nie je viac rovnakých funkcií... Sub Pokus1() Zobraz ("Bratislava", "Košice") End Sub Sub Pokus…
robert13 25.03.2015 10:34
robert13
A co treba deklarovat ty promenne? V Sub Zobraz(Mesto1, Mesto2) ti chybi typ: Sub Zobraz(Mesto1 as…
Jan Fiala 25.03.2015 10:16
Jan Fiala
nepomôže skúsil som dokonca obe deklarovať všeobecne ako Public Mesto1 As string Public Mesto2 As St…
robert13 25.03.2015 10:25
robert13
ono to ide, ak spravím všeobecnú deklaráciu všetkých premenných na začiatku modulu ako Public, potom…
robert13 25.03.2015 10:45
robert13
Volej proceduru pomocí Call... Sub Pokus() Call Zobraz ("Bratislava", "Košice") End Sub
JoDiK 25.03.2015 10:46
JoDiK
Ano, aj takto to funguje! Takže keď vymenovávam argumenty v zátvorke, musím volať prostredníctvom CA…
robert13 25.03.2015 10:56
robert13
a víťazom sa stáva Wikan!!! a v tesnom závese JoDiK Ďakujem všetkým za ochotu, trpezlivosť a spolup…
robert13 25.03.2015 10:53
robert13

Zobraz nie je premenná ale procedúra!

Mám mnoho procedúr, v ktorých nastavujem hodnoty, ktoré potom potrebujem odovzdať procedúre Zobraz ako argumenty.
Procedúra Zobraz preberie hodnoty do svojich premenných, s ktorými ďalej pracuje.
Že som použil MsgBox, je len príklad, na čom ukázať, že mi to nejde. V skutočnosti sú premenné používané inak

ďakujem, niečo som z toho, čo som pochopil dedukciou, odskúšal, zatiaľ bezvýsledne, ale nejde mi do hlavy, prečo by nemalo fungovať odovzdávanie viacerých argumentov... Stále sa mi zdá, že na základe voľakedy čítaného (bohvie kde) by to malo ísť a či nie je len problém v syntaxe...

Kdyz volas funkci, pouzivaji se zavorky. Kdyz volas proceduru, je to bez zavorek. Proc? Protoze Basic.

Promenne neni treba definovat predem (ani jako public). Pokud neuvedes typ, bere se jako vychozi typ variant. Sice tam muzes priradit, co chces, ale je to prasarna, protoze pak nevis, co ti tam kro posle. Hodne spatne se ladi chyby. Zvykni si deklarovat promenne s typem.

Public promenne delej jen v pripade, ze je opravdu potrebujes - je to promenna, ktera se pouziva v celem programu. Pouzivat public promenne v tomto pripade je cunarna - nevis kdo ti kdy tu promennou prepise, zvlast kdyz s programovanim zacinas. Opet se pak hodne spatne ladi chyby.

ono to ide, ak spravím všeobecnú deklaráciu všetkých premenných na začiatku modulu ako Public,
potom premenné X1, X2 ... XN naplním v procedúrach Pokus1, Pokus2 ... PokusN
a zavolám procedúru Zoznam, kde použijem MsgBox1=X1, MsgBox2=X2 ... MsgBoxN=XN

ale to je kopec zbytočného a neelegantného vypisovania.

Pokiaľ by fungovalo to, čo chcem, tak vo všetkých procedúrach Pokus len zavolám procedúru Zoznam a odovzdám všetky hodnoty X ako argumenty,
procedúra Zoznam si ich preberie do vlastných premenných a narába s nimi ďalej...

Zpět do poradny Odpovědět na původní otázku Nahoru