Zpráva o právě probíhajícím procesu   zodpovězená otázka

VB6/VBA

Ahoj,

Chtěl bych se zeptat, jakým způsobem udělat informační okno, které bude aktivní během práce makra.

Máme totiž makro, které běží cca 5 min a nechci, aby si během této doby někdo z uživatelů myslel, že se nic neděje. Během procesu makra by bylo spuštěné malé informační okno, kde by bylo napsáno např. "Prosím čekejte..."

Jakmile by makro doběhlo, okno s hláškou by zmizelo.

Vím, že to jde. Viděl jsem to fungovat, akorát nevím jak na to.

Předem díky za pomoc.

Mike

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ahoj,

Nikdo neví?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Píšete "makro", jde tedy o VBA? Pak třeba v Excelu?

Jestli ano, zkuste vytvořit formulář (z nabídky editoru VB zvolte: Insert / UserForm) s potřebným textem, formulář nemodálně (s parametrem False) otevřete, nechte provést ten časově náročný kód a formulář skryjte:

 Sub DlouheMakro()
     UserForm1.Show (False)
     ' časově náročný kód...
     UserForm1.Hide
 End Sub

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Tohle jednoduché řešení mě nenapadlo. Díky moc.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ahoj,

Vyzkoušel jsem to a nefunguje. Form se sice otevře a po ukončení makra zavře, ale nezobrazí hlášku, kterou jsem do něj napsal. Zobrazí se jen prázdný form. Co dělám špatně?

Díky.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jestli se hláška nezobrazí, pak tam asi není. Předpokládal jsem, že s formulářem si poradíte. Do UserForm přidejte Label nebo TextBox a teprve do něho napište potřebný text. Nastavte ve vlastnostech (Properties) nebo v kódu pro TextBox Multiline

Použijete-li TextBox můžete text hlášení vložit i v kódu anebo podle potřeby měnit, např. v určité části makra vložíte informaci o tom, která část zpracování právě probíhá:

  Sub DlouheMakro()
       UserForm1.Show (False)
       UserForm1.TextBox1.MultiLine = True
       UserForm1.TextBox1.Text = _
         "Zahájeno zpracování dat, které může trvat několik minut. "
       UserForm1.TextBox1.Text = UserForm1.TextBox1.Text & vbCrLf & _
        "Čekejte, prosím"
        ' časově náročný kód - část...
       UserForm1.TextBox1.Text =  _
        "... probíhá konečná operace, vyčkejte na dokončení."
        ' časově náročný kód - dokončení...
       UserForm1.Hide
   End Sub

nahlásit spamnahlásit spam 0 odpovědětodpovědět

No jasný. Formuláře ve VBA jsem už několikrát dělal a mám s nimi zkušenosti. Hlášku jsem tam samozřejmě dal (pomocí LABELu), ale při spuštění makra se zobrazil jen prázdný form.

Stejně vím, že existuje jiné řešení, jak zobrazit hlášení během makra. Jde to buď udělat do statusbaru ( to umím, ale nelíbí se mi to) Použití formu je sice dobré, ale zobrazuje se v okně i lišta s ikonou pro zavření okna. Já tehdy viděl jen samotné tělo formu, bez lišty. To ale bohužel nevím jak udělat.

Každopádně díky.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Vyzkoušel jsem Vaše druhé makro a taky se mi během spuštění dlouhého makra zobrazí jen prázdné okno. UserForm je jmenuje UserForm1 a přidaný TextBox se jmenuje TextBox1. Vše sedí dle vašeho makra.Cokoliv přidám do formu se prostě nezobrazí.

Myslel jsem, že za to může ScreenUpdating, ale nemůže.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zobrazení formuláře asi brání kód, který jeho otevření předchází. Zkuste za UserForm1.Show (False) přidat do dalšího řádku DoEvents

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Okno formuláře můžete znepřístupnit nastavením UserForm1.Enable = False anebo uzavření zabránit vložením kódu do formuláře:

  Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = 0 Then
      Cancel = True
    Else
      Cancel = False
    End If
  End Sub

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Vyzkouším. Zatím díky.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
UserForm1.Show (False)
DoEvents

Pomohlo!

Díky moc.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback