Commando verbergen

Status
Niet open voor verdere reacties.

JeffVDB

Gebruiker
Lid geworden
25 aug 2009
Berichten
106
it's me again.
Ik zit met het volgende probleem in een formulier :
Eerst geef ik de code :
Code:
Private Sub cboVak_AfterUpdate()
Dim txtBegin As Date
Dim txtEinde As Date
Dim txt As Date

    If Me.txtOmschr Like "*T*D*" Then
        Me.lblOpt10.Caption = "Kamers NPTD"
    Else
        Me.lblOpt10.Caption = "Kamerverdeling"
    End If
    Me.txtBegin = Format(Me.cboVak.Column(4), "dd mmm yyyy")
    Me.txtEinde = Format(Me.cboVak.Column(5), "dd mmm yyyy")
    Me.txt = Format(Date - 90, "dd mmm yyyy")
    'controle datum binnen de 3 maanden valt
    If Me.txtBegin >= Me.txt Then
        Me.Opt09.Visible = True
        Me.lblMenu9.Visible = True
    Else
        Me.Opt09.Visible = False
        Me.lblMenu9.Visible = False
    End If
End Sub
De eerste If ... End doet het uitstekend
De tweede daarentegen verbergt Opt9 en lblMenu9 altijd. Waar zit de fout?
 
We kunnen zo natuurlijk niet zien wat er in die textboxen staat maar wel dat je er een rekenkundige vergelijking op los laat. Als het datums zijn zul je die inhoud eerst moeten omzetten naar de juiste datatypes om de vergelijking te kunnen doen.

Tip:
Je heb er al wel de juiste variabelen voor gedeclareerd maar je gebruikt ze niet ;)
 
Laatst bewerkt:
Je maakt sowieso één grote fout: de variabele geef je de zelfde naam als het tekstveld, en dat moet je dus nóóit doen. Ik heb het uiteraard over txtBegin. Als dat tekstveld is gekoppeld aan een tabelveld, kun je beter naar het onderliggende veld verwijzen dan naar het tekstveld. De Opmaak van dat tekstveld hoef je uiteraard ook helemaal niet met VBA te doen, dat is veel makkelijker in de Notatie eigenschappen van het tekstveld in te stellen. Al mag dit wel, het is op zich niet fout. Maar ik maak me een beetje zorgen om het veld Me.txt. Wat is dat? En als je een vergelijking tussen twee datumvelden wilt maken, moet je de string ook als datum opbouwen. Dus zo:
Code:
    If Cdate(Me.txtBegin) >= CDate(Me.txt) Then
bijvoorbeeld. Maar zelfs dit is niet geweldig, omdat VBA de datum als Amerikaans ziet, en jij waarschijnlijk de Nederlandse notatie opslaat. En dan krijg je problemen met waarden als: 5-6-2014. Is dat 5 juni, of 6 mei? Ik weet het :)
 
Ik heb de code van Octafish getest. Ik krijg hetzelfde resultaat als hierboven. Opt9 en label blijven bij elke keuze in cboVak zichtbaar.
Wat me.txt betreft, ik heb dat kind een gemakkelijke naam gegeven, alleen maar om te testen. Voor een buitenstaander had het evengoed txtPeriode kunnen heten. Het is 3 maanden terug in de tijd.
 
De naam ervan boeit uiteraard niet, zolang het een geldige naam is. Maar wat is het voor veld? Dat vind ik veel belangrijker!
 
Octafish,

dit is een datumveld. Ik hoop dat het dat is wat je bedoelt.
Cfr : Me.txt = Format(Date - 90, "dd mmm yyyy")
Mijn bedoeling is dat de verjaardagen van deelnemers tijdens een vakantie, alleen van de laatste 3 maanden kunnen opgevraagd worden. Als dat lukt, kan de periode uiteraard aangepast worden.
 
Je hebt, dank zij het Format commando, een tekstveld gemaakt, en geen datumveld. Format opdrachten leveren altijd een tekst terug, ongeacht wat je er instopt. Wil je de inhoud ervan vervolgens gaan vergelijken met een datumveld, dan heb je dus een probleem. In jouw geval een dubbel probleem, want de datumvelden waarmee je wilt vergelijken heb je ook al omgezet naar tekst. Dus nu worden al je velden getest op de alfanumerieke waarden, i.p.v. de datumwaarden. Je hebt daar vast een goede verklaring voor :). Maar ik zeg: niet doen, een datum is een datumveld, en hoe je daar naar kijkt (i.e. hoe je wilt dat de datum getoond wordt) doe je met notatie, en niet met aparte opmaakcommando's. Tenzij je er niet mee wilt rekenen of filteren.
 
Octafish,

Ik heb je raad opgevolgd en ik heb ook een oplossing gevonden.
Ik doe het nu zo en het werkt (tot mijn eigen verbazing, ik heb iets bijgeleerd).
Misschien kun jij het, met jouw ervaring, op een properder manier doen.
Mag ik het dan ook weten?
Code:
Private Sub cboVak_AfterUpdate()
    If Me.cboVak = "" Then
        Me.txtVan = ""
    Else
    'me.txt = Vandaag - 90 dagen
        If CDate([txtEinde]) <= CDate([txt]) Then
            Me.txtVan = "Te laat"
        Else
            Me.txtVan = "Te vroeg"
        End If
    End If
    'controle vakantie in Nieuwpoort of niet
    If Me.txtOmschr Like "*T*D*" Then
        Me.lblOpt10.Caption = "Kamers NPTD"
    Else
        Me.lblOpt10.Caption = "Kamerverdeling"
    End If
    'controle datum binnen de 3 maanden valt
    If Me.txtVan = "Te laat" Then
        Me.opt9.Visible = False
        Me.lblMenu9.Visible = False
    Else
        Me.opt9.Visible = True
        Me.lblMenu9.Visible = True
    End If
End Sub
 
Je kan 1 IF weghalen, want de check daarop doe je al eerder.
]
Code:
        If CDate([txtEinde]) <= CDate([txt]) Then
            Me.txtVan = "Te laat"
            Me.opt9.Visible = False
            Me.lblMenu9.Visible = False
        Else
            Me.txtVan = "Te vroeg"
            Me.opt9.Visible = True
            Me.lblMenu9.Visible = True
        End If
 
Octafish,

Je hebt gelijk. Ik was er ondertussen al zelf achter gekomen en het werkt.
Wat ik ook gedaan is, is het commando opt9 verwijderen en een nieuw commando ingebracht, als naam opt9.
En nu werkt het wel. Er moet iets fout gelopen zijn in het origineel commando.
Ik beschouw dit probleem ook als opgelost.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan