< návrat zpět

MS Excel


Téma: Verejna Promenna rss

Zaslal/a 5.5.2022 22:09

Zdravím.
Mám napsané makro, které po provedení nějakých příkazu volá jiné makro. Lze proměnnou,kterou vytvoří to volane makro nějak uchovat k dispozici tomu prvnímu makru? ..to totiž pak pokračuje dále.
Samozřejmě by asi šlo obě makra sloučit, ale pro větvení chci zachovat to volání druheho z prvniho.

Je nějaký rozdíl ,když to druhé makro spouštíme jen uvedením jeho jména ,nebo s příkazem call a název?
Dekuji

Zaslat odpověď >

#052655
elninoslov
Áno. Nadefinujete si globálnu premennú v module
Dim globValue as long
Sub Makro1
bla bla
Call Makro2
MsgBox "upravená premenná " & globValue
End Sub


Sub Makro2
bla bla
globValue = globValue + 1
End Sub


alebo budete volať to druhé makro v premennou ByRef
Sub Makro1
Dim locValue as long
bla bla
Call Makro2 locValue
MsgBox "upravená premenná " & locValue
End Sub


Sub Makro2(ByRef locValue as long)
bla bla
locValue = locValue + 1
End Sub

Neskúšané - len tak z hlavy!

alebo si premennú uložíte do dočasnej bunky (ak sa jedná o takú premennú) prípadne do definovaného názvu.

Potom je tu ešte možnosť uložiť premennú do vlastností dokumentu to si z hlavy nepamätám.citovat
#052656
avatar
Zdravím.
..Áno. Nadefinujete si globálnu premennú v module
Dim globValue as long

makro 1 je v jiném modulu než makro 2 , to je jednou kde to bude nedefinované, nebo to musí být v obou modulech ?citovat
#052657
avatar
..když jsem ji zadal do Makro1, je dostupná v makru2, a i se zmení jak chci, ale jakmile makro2 skončí a předá řízení makru1, tak se ta proměnná vygumuje.citovat
#052658
avatar
.. Je tedy nějaký rozdíl ,když to druhé makro spouštíme jen uvedením jeho jména ,nebo s příkazem call a název?citovat
#052659
elninoslov
To je jedno v ktorom module, ale iba 1 raz, nie v každom.
Ďalej ma napadlo, že Makro2 môže byť funkcia s návratovou hodnotou, napr.
Sub Makro1
Dim VysledokVypoctu as long
bla bla
VysledokVypoctu = fncMakro2
MsgBox "Výsledok " & VysledokVypoctu
End Sub


Function fncMakro2() as long
Dim Vypocet as long
bla bla
Vypocet = Vypocet + 1
fncMakro2 = Vypocet
End Function


Všetko bude záležať na viac veciach. Aká je to premenná, čo s ňou robíte pred tým, čo potom, makro je opakované, vnárané (rekurzívne), má sa uchovať po skončení všetkých makier, ...

EDIT:
Tak pozerám, že mi to cross-modul nefachá. Použite ten parameter ByRef, to fičí.citovat
#052665
Stalker
Možná kecám, nemám jak ověřit, sem na telefonu. Ale nějak se nemůžu zbavit dojmu, že proměnná musí být v ClassModule, aby byla viditelná ve všech modulech.

EDIT
Tak kecám 7
Pro použití proměnné ve všech modulech stačí její deklaraci uvést jako PUBLIC nebo GLOBAL. Tedy na začátek modulu
GLOBAL globValue as long
To použití ClassModule bylo pro jiný případ (který si už samozřejmě nepamatuju), a nedaří se mi to dohledat.citovat
#052686
avatar
...no...trochu s tím bojuju, asi to bude chtít ještě čas.
zatím děkuju za informace,asi budu ještě otravovat.citovat

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje