< návrat zpět

MS Excel


Téma: DoEvents nechtěně zastaví makro rss

Zaslal/a 18.10.2013 22:17

Při použití DoEvents vše běží jak má, jiná aplikace posílá do sešitu data a tato jsou zpracována. Makro ovšem nečekaně skončí, pokud manuálně vepíšu do jakékoli buňky cokoli z klávesnice. Samotný výběr buňky nevadí, ale jakmile vložím jakýkoli znak, makro končí... Nevíte někdo proč?

Sub MM()
PocetRadku = Cells(Rows.Count, 4).End(xlUp).Row
Do While Cells(3, "K") = ""
For I = 9 To PocetRadku
If Cells(I, 7) < Cells(I, 8) Then Cells(I, 12) = Cells(I, 7) + Cells(I, 8)
Cells(1, "K") = I Mod 1000
Next I
DoEvents
Loop
End Sub

Zaslat odpověď >

#015782
avatar
to len hadam :) to makro neskonci len zamrzne obrazovka ale makro pokracuje dalejcitovat
#015874
avatar

Palooo napsal/a:

to len hadam :) to makro neskonci len zamrzne obrazovka ale makro pokracuje dalej


Nikoli, naprosto regulerne skonci. Obrazovka nezamrzne.citovat
icon #015878
eLCHa
Tady vám nikdo asi neporadí - muselo by se přesně vidět co děláte.

Nicméně - jestli makro končí regulérně zjistíte tak, že před End Sub vložíte Stop (nebo na End Sub nastavíte BreakPoint).
Pokud se tam kód zastaví, je to dobrá zpráva a máte nějakou chybu v kódu.
Pokud ne, budete muset proceduru přepsat jinak - my odsud nezjistíme, co to způsobuje.citovat
#015882
avatar
ved prave som to makro testoval s breakpoitami aj ked neviem co presne to makro ma robit ale funguje .... zas na druhu stranu je dost mozne ze sa zacykli .)))citovat
icon #015884
eLCHa
Na zacyklení to nevypadá - píše že kód skončí
Kdyby se zacyklilo - tak excel nakonec zešedne a nepude nic dělat
Ještě někdy funguje Esc na přerušení běhucitovat
#015886
avatar
DavDvo: mozes to poslat na nejakom priklade?? a este k tomu popisat co to ma robit?citovat
#015899
avatar
Je jedno co to ma delat, kdyz mi to nefunguje ani na jednoduchem prikladu viz priloha.
Idea prikladu je takova, ze bezi, bezi, dokud se neco nezapise do cells(3,"K"). Jenomze ono to skonci pri zapisu z klavesnice cehokoli kamkoli.
Je pravda, ze k Stop se pak makro nedopracuje, proste ihned skonci, zrejme na popud DoEvents. Nevim, jestli je to normalni chovani teto instrukce. DoEvents tam je, aby jina aplikace mohla psat do tohoto sesitu, to funguje, ale v prikladu to neni.
Příloha: rar15899_test.rar (7kB, staženo 14x)
citovat
#015901
Opičák
Nikdy jsem s tou fcí nic nedělal, tak jen zkouším.

Pokud napíšu toto
Sub MM()
Do
K = K + 1
Debug.Print K
If K > 100 Then DoEvents: K = 0
Loop
End Sub

všechno jede. Jakmile změním debug.Print na zápis do buňky listu, pak skončí v jakémsi "zablokovaném" stadiu. Kurzor nereaguje na šipky, musí se někam kliknout myší.

Takže neporadil jsem, jen to co jsem zjistil u sebe.citovat
icon #015904
eLCHa
Mimochodem
tady bude asi špatně princip celé činnosti
Proč zadáváte data z jiné aplikace,k tomu máte ještě spuštěný kód VBA a k tomu ještě zadáváte něco ručně?citovat
#015940
avatar
Toto chování fce DoEvents jsem nedávno objevil taky.
Citace z helpu:
"Funkce DoEvents předá řízení operačnímu systému.
Řízení je předáno zpět, jakmile operační systém dokončí zpracování událostí ve frontě
a všechny úhozy ve frontě PředatKlávesovéÚhozy jsou odeslány."
Opravdu to takto fachčí.
Pokud ovšem je vyvolán mód editace, běh makra je v místě "DoEvents" ukončen.
Nevím proč, ale je to tak.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