VBA výběr data   zodpovězená otázka

VB6/VBA

Dobrý den,

můj dotaz se týká VBA. (možná je sto stejné jako u VB)

Mám DTPicker (výběr data), a na akci změny mám navázanou kontrolu (např. jestli je vybrané datum menší než dnešní datum).

Nevíte prosím někdo, jak nastavit, aby při změně, která není přípustná (dle kontroly) se datum nastavil zpět na výchozí ze kterého jsem to měnil.

Mě to zahlásí hlášení (msgbox, z kontroly), ale datum se samozřejmě přemění.

Děkuji Roman

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

Možná zkuste něco jako, že při změně data (pokud je datum v pořádku) uložit datum do proměnné a znovu při změně data, pokud je datum správně, proměnnou přepsat a když není, vyplnit DTP datem z proměnné.

Je to jen teorie, já sám se domluvím pouze ve VB .NET, takže radím tak trochu naslepo.

P.S.: Myslím, že tento dotaz patří spíše do fóra VB6 a jiné verze.

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

Díky za odpověď,

myslím ale, že je problém v té akci "Private Sub DTPicker1_change()". To už je ale pozdě něco nastaovat, protože ta se provádí, když je už ta změna. Pokud jít touto cestou, tak se na to musí nějakou fintou.

Díky Roman

nahlásit spamnahlásit spam 0 odpovědětodpovědět
 Option Explicit
 Dim PuvodniHodnota As Date
 
 Private Sub DTPicker1_Change()
   If DTPicker1.Value < PuvodniHodnota Then
     DTPicker1.Value = PuvodniHodnota
   End If
 End Sub
 
 Private Sub DTPicker1_MouseDown(ByVal Button As Integer, _
     ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, _
     ByVal y As stdole.OLE_YPOS_PIXELS)
   PuvodniHodnota = DTPicker1.Value
 End Sub

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

Díky, fungujeto.

Ale neví proč nefunguje "BeforeUpdate" stejně jako "MouseDown"? Ale to je asi jedno, když funguje aspoň něco.

Díky Roman

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

Podívejte se, zda-li nemá ten ovládací prvek událost BeforeUpdate. Událost BeforeUpdate má parametr Cancel kterým lze automaticky zrušit nově provedené úpravy (zůstanou původní hodnoty).

Vzhledem k tomu, že nemám k dispozici ovládací prvek DTPicker, musím příklad uvést na ovládacím prvku TextBox.

Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
  If CDate(TextBox1.Text) < Now() Then
    MsgBox "Neplatné datum."
    Cancel = True
  End If
End Sub

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