VBA - přerušení běhu makra Vyřešeno

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

Moderátor: Mods_senior

VALL
Level 1
Level 1
Příspěvky: 95
Registrován: únor 12
Pohlaví: Nespecifikováno
Stav:
Offline

VBA - přerušení běhu makra

Příspěvekod VALL » 12 čer 2012 13:43

Ahoj, mám kód, který vepíše do zadané oblasti hodnoty. Na základě změn hodnot v dané oblasti se spustí dotaz na pozadí sešitu Excel a importují se data z databáze.
Já jsem rozšířil kód tak, že:
1. Vložím hodnoty do dané oblasti - má se spustit dotaz na pozadí
2. další část kódu vkládá hodnoty z tabulky importu dat.

Celý problém je v tom, že po bodu 1 se nespustí dotaz na pozadí a neimportuje data. Data jsou importovány až po skončení celého kódu, tzn., bodu 2, což je pozdě.
Hledám řešení, jak kód přerušit, aby se mohl spustit dotaz na pozadí pro import dat a poté kód dokončit. Tzn., bod 1 - přerušení - bod2 - konec.

Kód:

Kód: Vybrat vše

Sub RozFiltr()
'BOD 1
'Vyfiltruje moduly požadovaného Projektu
'----------------------------------------------------
    Range("tab.ModulProjekt").AdvancedFilter Action:=xlFilterCopy, CriteriaRange _
        :=Range("KriteriaFiltr"), CopyToRange:=Sheets("csl_ProjektySledovat").Range("I1"), Unique:=True

    Range("tab.ModulProjekt").AdvancedFilter Action:=xlFilterCopy, CriteriaRange _
        :=Range("KriteriaFiltr"), CopyToRange:=Sheets("csl_ProjektySledovat").Range("J1"), Unique:=True

'BOD2
'Vyfiltruje data pro vybraný projekt
'----------------------------------------------------
  Sheets("VykazPrace").Range("A9").Select
   Range(Selection, Selection.End(xlToRight)).Select
   Range(Selection, Selection.End(xlDown)).Select
  Selection.ClearContents

    Range("tab.viM002z[#all]").AdvancedFilter Action:=xlFilterCopy, _
      CopyToRange:=Range("VykazPrace_Kriteria"), Unique:=True

  Range("a9").Select
End Sub

Reklama
Azuzula
Level 3
Level 3
Příspěvky: 452
Registrován: leden 12
Bydliště: Země, bohužel...
Pohlaví: Žena
Stav:
Offline
Kontakt:

Re: VBA - přerušení běhu makra

Příspěvekod Azuzula » 12 čer 2012 15:40

Pokud by šlo jen o přerušení běhu makra, tak bych bod1 a bod2 rozdělila do dvou maker a to druhé volala metodou OnTime.

Kód: Vybrat vše

Application.OnTime Now + TimeValue("0:00:02"), "volane_makro"

Ale ve vašem příkladu je jen filtrace a mazání, takže předpokládám, že se makro importu volá při nějaké změně na listu? Takže bych spíš volala druhé makro (bod2) na konci importu což by bylo určitě nejjednodušší bez zbytečné časové prodlevy.
Pokud je to vše.
Vše co znám z VBA jsem se naučila tady na fóru, na Office.lasakovi, david-zbiral.cz a hlavně hledáním na googlu.
SZ není poradna, na pokládání dotazů je tu fórum. Děkuji.

VALL
Level 1
Level 1
Příspěvky: 95
Registrován: únor 12
Pohlaví: Nespecifikováno
Stav:
Offline

Re: VBA - přerušení běhu makra

Příspěvekod VALL » 12 čer 2012 15:51

Ono jde o to, že první makro vyvolá událost v sešitě, který otevře SQL dotaz a ten importuje data z SQL Serveru. Pokud to makro nepřeruším před bodem 2, tak se data naiportují až po skončení makra, a to je pozdě, protože na výsledné listině jsou data neaktuální.

--- Doplnění předchozího příspěvku (12 Čer 2012 15:57) ---

Díky, On time funguje dobře. Mám zde jen obavu, že pokud bude trvat spuštění dotazu na pozadí déle než jsem nastavil onTime, tak se data neaktualizují.

Toto asi ošetřit nejde?

d1amond
člen HW spec týmu
Elite Level 12
Elite Level 12
Příspěvky: 16119
Registrován: květen 08
Bydliště: České Budějovice
Pohlaví: Muž
Stav:
Offline

Re: VBA - přerušení běhu makra

Příspěvekod d1amond » 12 čer 2012 15:58

Import bych spouštěl a kontroloval funkcí. Funkce se může volat z procedury a po jejím skončení pokračuje procedura dál.
Nikdy neříkej, že to nejde, protože se najde někdo, kdo o tom neví a udělá to!
Chcete si nechat sestavit nový počítač?

Azuzula
Level 3
Level 3
Příspěvky: 452
Registrován: leden 12
Bydliště: Země, bohužel...
Pohlaví: Žena
Stav:
Offline
Kontakt:

Re: VBA - přerušení běhu makra

Příspěvekod Azuzula » 12 čer 2012 16:03

Nevím jak funguje dotaz na SQL, ale nedá se na konci toho dotazu volat další makro? Tedy ten Bod2?
Případně, dalo by se do toho SQL dotazu na konec přidat nějaký zápis do pomocné buňky v excelu? Pak by se dalo třeba s pomocí sheet_change kontrolovat ta buňka na přítomnost poznámky o ukončení dotazu a spuštění makra.
Pokud je to vše.
Vše co znám z VBA jsem se naučila tady na fóru, na Office.lasakovi, david-zbiral.cz a hlavně hledáním na googlu.
SZ není poradna, na pokládání dotazů je tu fórum. Děkuji.

VALL
Level 1
Level 1
Příspěvky: 95
Registrován: únor 12
Pohlaví: Nespecifikováno
Stav:
Offline

Re: VBA - přerušení běhu makra

Příspěvekod VALL » 12 čer 2012 16:06

Díky, ale to je už nad moje znalosti. Data importuji pomocí Microsoft Query, která má funkci parametrického řízení dotazu (podmínka pro sql dotaz definovaná v sešitě). Netuším, jak funkcí řídit okamžik od změny buňky, která vyvolá spuštění dotazu.

--- Doplnění předchozího příspěvku (12 Čer 2012 16:08) ---

Odpověď Azuzule:
SQl Dotaz si šahá do sql databáze - nějaké tabulky. Takže funkcionalita je pevně daná a já nemám šanci to jakkoliv změnit.

Azuzula
Level 3
Level 3
Příspěvky: 452
Registrován: leden 12
Bydliště: Země, bohužel...
Pohlaví: Žena
Stav:
Offline
Kontakt:

Re: VBA - přerušení běhu makra

Příspěvekod Azuzula » 12 čer 2012 16:33

Tak v tom případě nevím, SQL je na mě momentálně vyšší dívčí, ale jak psal D1amond. Tedy pokud jde MS Query také ovládat s VBA, tak by to už nějak vymyslet šlo.
Další věc co mě napadá (pokud se pro ten import otevře nějaké okno, tak by zavření toho okna šlo hlídat za pomoci API funkce FindWindow a tím případně oddálit proběhnutí druhého makra.
Pokud je to vše.
Vše co znám z VBA jsem se naučila tady na fóru, na Office.lasakovi, david-zbiral.cz a hlavně hledáním na googlu.
SZ není poradna, na pokládání dotazů je tu fórum. Děkuji.

VALL
Level 1
Level 1
Příspěvky: 95
Registrován: únor 12
Pohlaví: Nespecifikováno
Stav:
Offline

Re: VBA - přerušení běhu makra

Příspěvekod VALL » 13 čer 2012 07:24

To zní zajímavě. Máte nějaký příklad (kód), podle kterého bych se mohl inspirovat?

Azuzula
Level 3
Level 3
Příspěvky: 452
Registrován: leden 12
Bydliště: Země, bohužel...
Pohlaví: Žena
Stav:
Offline
Kontakt:

Re: VBA - přerušení běhu makra  Vyřešeno

Příspěvekod Azuzula » 13 čer 2012 19:34

Kód: Vybrat vše

Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _
     ByVal lpClassName As String, _
     ByVal lpWindowName As String) As Long

sub hlidej_okno
Dim najdiokno
Dim program As String
program = "C:\WINDOWS\system32\cmd.exe" 'cesta k souboru, nebo celý název otevřeného okna.
najdiokno = FindWindow(vbNullString, program)
Do While Not najdiokno = 0
najdiokno = FindWindow(vbNullString, program)
Loop
end sub
Pokud je to vše.
Vše co znám z VBA jsem se naučila tady na fóru, na Office.lasakovi, david-zbiral.cz a hlavně hledáním na googlu.
SZ není poradna, na pokládání dotazů je tu fórum. Děkuji.


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

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti