

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 ;)
VBA nepodporuje overloading funkcí v takové podobě, jaká je známá u pokročilejších jazyků. Nicméně nějaká řešení se taky najdou:
http://stackoverflow.com/questions/64436/function- overloading-and-udf-in-excel-vba
ď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...
Více argumentů funguje. Nefunguje, když tam máš více stejně pojmenovaných funkcí.
OK, z toho tvého popisu to tak ale vypadalo.
Zkus to volat takhle:
ja som mal Zobraz ("Bratislava", "Košice"), t.j. odosielam dva argumenty, ktoré si má procedúra Zobraz prevziať do premenných Mesto1 a Mesto2...
Takže skúsim tvoju verziu...
Jupííííí, máš pusu na čelo!!!
Tak to sa divím... predávané hodnoty sa nevymenovávajú v zátvorkách?!?!
DÍKY MOOOC!!!
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.
Vyznam deklarovania poznam, je fakt, ze ho nezvyknem pouzivat inokedy, nez ked potrebujem platnost v celom programe, t.j. public
Beriem na vedomie radu deklarovat aj typy ostatnych premennych, kazdopadne toto nebol problem deklaracii ale syntaxu volania procedury.
Ale dik za radu
Díky moc klucí,
trápilo mě to dlouho a úplně náhodou jsem narazil na vaše příspěvky. Taky jsem nevěděl jak předat dva a více parametrů a jde jen o takovou blbost a to, nedát to do závorek.. :D
tu nie je viac rovnakých funkcií...
Sub Pokus1()
Zobraz ("Bratislava", "Košice")
End Sub
Sub Pokus2()
Zobraz ("Žilina", "Zvolen")
End Sub
Sub Zobraz(Mesto1, Mesto2)
MsgBox Mesto1
MsgBox Mesto2
End Sub
A co treba deklarovat ty promenne? V Sub Zobraz(Mesto1, Mesto2) ti chybi typ:
nepomôže
skúsil som dokonca obe deklarovať všeobecne ako
Public Mesto1 As string
Public Mesto2 As String
Stále píše chybu vo volaní Zobraz ("Bratislava", "Košice")
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...
Volej proceduru pomocí Call...
Sub Pokus()
Call Zobraz ("Bratislava", "Košice")
End Sub
Ano, aj takto to funguje!
Takže keď vymenovávam argumenty v zátvorke, musím volať prostredníctvom CALL
Díky!!!!!
a víťazom sa stáva Wikan!!!
a v tesnom závese JoDiK
Ďakujem všetkým za ochotu, trpezlivosť a spoluprácu