Makro v Excelu funguje pouze v Debug modu

Programy pro práci v kanceláři (Word, Excel, Access…=>Office)

Moderátor: Mods_senior

Zamčeno
Luboš
Tvůrce článků
Příspěvky: 2038
Registrován: 13 kvě 2005 07:14

Makro v Excelu funguje pouze v Debug modu

Příspěvek od Luboš »

Zdravím všechny ochotné lidi, kteří mi mohou pomoct. Napsal jsem makro v VBA pro Excel 2003, které něco vypočítáva (řádově asi 3 sekundy) a na konci má toto makro zobrazit zprávu o ukončení výpočtu. V ladícím modu, když krokuji každý řádek makra, se toto okénko zobrazí a čeká na odkliknutí - přesně tak, jak to chci. Když však makro spustím přes asociované tlačítko, tak výpočet sice proběhne (zobrazí se změněné hodnoty po výpočtu), ale ukončující dialog ne. Nevíte proč? Na tomto fóru jsem odpověď nemohl najít. Děkuji za smysluplné odpovědi.

Konec makra je následující:

...
Text1 = "Výpočet ukončen"
Text2 = "Zpráva"

Response = MsgBox(Text1, 0, Text2)
Potřebujete jinou pomoc při řešení problému ve Windows 10? Stáhněte si soubor Win10-finty.
navstevnik
Level 4
Level 4
Příspěvky: 1142
Registrován: 29 srp 2008 16:49

Re: Makro v Excelu funguje pouze v Debug modu

Příspěvek od navstevnik »

Pricinou muze byt to, ze v bufferu klavesnice je ulozen stisk klavesy Enter (mezernik) v dobe, nez je zobrazena zprava o ukonceni vypoctu. Zobrazena zprava ocekava stisk klavesy (enter, mezernik), a protoze v buferu klavesnice je tento znak ulozen, precte a zpravu ukonci. Overit to muzes vlozenim radku kodu s dalsi zpravou a v dobe pozastaveni behu kodu stiskni mezernik, zobrazi se az druha zprava:

Kód: Vybrat vše

Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
Sub aa()
  Text1 = "Vypocet ukoncen"
  Text2 = "Zpráva"
  ' v dobe pozastaveni behu makra stiskni mezernik
  Sleep 1000
  response = MsgBox(Text1, 0, Text2)
  response = MsgBox("Druha zprava")
End Sub

Neni nekde v behu kodu pouzit prikaz SendKeys "~" ? Ukazka:

Kód: Vybrat vše

Sub aa()
  Text1 = "Vypocet ukoncen"
  Text2 = "Zpráva"
  SendKeys "~" ' Enter
'  SendKeys "~" ' Enter
  response = MsgBox(Text1, 0, Text2)
  response = MsgBox("Druha zprava")
End Sub

Pokud bude zaktivovan i druhy prikaz SendKeys "~", tak se nezobrazi ani druha zprava.
Samozrejme pricina muze byt i jinde, ale vice informaci jsi neposkytl.
Luboš
Tvůrce článků
Příspěvky: 2038
Registrován: 13 kvě 2005 07:14

Re: Makro v Excelu funguje pouze v Debug modu

Příspěvek od Luboš »

Bohužel, nezabralo ani Sleep ani Application.Wait, ale problém jsem vyřešil úplně náhodou. V hlavním chodu jsem totiž vyvolal proceduru pro výpočet příkazem Call a až po něm jsem uvedl příkaz pro zobrazení zprávy - tato varianta však nefungovala, jak jsem uvedl. Zkusil jsem přesunout příkaz Msg z hlavního chodu na konec procedury pro výpočet a ejhle - všechno funguje. Akorát mi uniká logika tohoto problému.
Takže shrnuto:

1. původní varianta:

Sub Main()
...
Call Vypocet()
Response Msg("Výpočet ukončen",0,"Zpráva")
End Sub

Sub Vypocet()
...
End Sub

2. opravená varianta:

Sub Main()
...
Call Vypocet()
End Sub

Sub Vypocet()
...
Response Msg("Výpočet ukončen",0,"Zpráva")
End Sub

Děkuji za ochotu
Potřebujete jinou pomoc při řešení problému ve Windows 10? Stáhněte si soubor Win10-finty.
Zamčeno
  • Podobná témata
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • League of Legends - vysoké ms pouze u her od riotu
    od 4Lift » » v Hry
    6 Odpovědi
    6802 Zobrazení
    Poslední příspěvek od 4Lift

Zpět na „Kancelářské balíky“