Userform werkt niet als ik 2 invoervelden gebruik

Status
Niet open voor verdere reacties.

youdeni

Gebruiker
Lid geworden
28 feb 2008
Berichten
147
Beste,

Gisteravond mijn eerste userform in Excel gemaakt. Alleen het werkt niet zoals ik wil. Het is in principe een heel simpel. De gebruiker krijg een inputbox waarin hij een begin en een einddatum
moet opgeven. Als de begin en einddatum zijn ingevoerd moet een andere macro gestart worden. Nu heb ik in de code ook afgevangen dat als er geen datum wordt ingevoerd er een melding
verschijnt dat men een geldige datum moet invoeren. Nu werkt dit alleen als ik de begin datum invoer. Maar als dit nagenoeg dezelfde code gebruik voor de eind datum dan krijg ik de foutmelding: Sub of function niet gedefinieerd.

Code:
Private Sub EnterButton_Click()
Dim cDatum As Date
Dim eDatum As Date
Sheets("Definitie").Activate
 If Not IsDate(BeginDatum.Text) Then MsgBox "Vul een  geldige begin datum in."
  cDatum = CDate(BeginDatum.Text)
  Range("K10") = cDatum
   
 If Not IsDate(EindDatum.Text) Then MsgBox "Vul een  geldige eind datum in."
  eDatum = [B]EDate([/B]EindDatum.Text)   'hier geeft ie de fout
  Range("K19") = eDatum
BeginDatum.Text = " "
EindDatum.Text = " "
BeginDatum.SetFocus
Application.Run "macro.xlsm!Macro2"
End Sub
 
Gebruik eens CDate waar je nu EDate gebruikt.
 
Laatst bewerkt:
Tenzij eDate een eigen functie is natuurlijk waarin je CDate gebruikt :).
 
EDate is een VB functie maar die wil 2 parameters hebben.
 
Gebruik eens CDate waar je nu EDate gebruikt.

Ed nu krijg ik een andere foutmelding. Als ik bijvoorbeeld 1 in vul bij het veld begin datum en dan op enter druk dan krijg ik de foutmelding: Typen komen niet met elkaar overeen. op de vet gemaakte onderstaande regel.

Code:
Private Sub EnterButton_Click()
Dim cDatum As Date
Dim eDatum As Date
Sheets("Definitie").Activate
 If Not IsDate(BeginDatum.Text) Then MsgBox "Vul een  geldige begin datum in."
  cDatum = CDate(BeginDatum.Text)
  Range("K10") = cDatum
   
 If Not IsDate(EindDatum.Text) Then MsgBox "Vul een  geldige eind datum in."
 [B] eDatum = CDate(EindDatum.Text)[/B]
  Range("K19") = eDatum
BeginDatum.Text = " "
EindDatum.Text = " "
BeginDatum.SetFocus
Application.Run "macro.xlsm!Macro2"
End Sub
 
Een 1 is uiteraard ook geen datum.
Plaats je document eens.
 
Ed,

Snap dat 1 geen datum is. Maar ik wil dus ook dat als iemand een verkeerde invoer geeft dat de gebruiker de melding krijgt dat ze een geldige datum moeten invoeren.
Als de gebruiker geen correcte datum invoert gaat het verderop in het bestand fout. Dus ik wil afdwingen dat hier altijd een datum wordt ingevuld.
Heb het bestand toegevoegdBekijk bijlage macro_test.xlsm
 
Ed,

Werkt in principe goed. Alleen als een gebruiker alleen een begin datum op geeft en GEEN einddatum (ja helaas die gebruikers heb je) loopt de macro vast.
Hoe los ik dat op?
 
Dat kun je simpel afvangen in de button macro:
Code:
If BeginDatum.Text = "" Or EindDatum.Text = "" Then
    MsgBox "Beide datums dienen ingevuld te zijn"
    Exit Sub
End If

Ook kan je nog een controle inbouwen dat bijvoorbeeld de einddatum later moet zijn dan de begindatum.
 
Ed,

Super dit werkt goed. Ik heb nog twee vraagjes. Hoe krijg ik voor elkaar dat als op enter is gedrukt dat het userform wordt gesloten?
en kan je die private subs uitleggen? Wanneer worden die aangeroepen?

Code:
Private Sub BeginDatum_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If Not IsDate(BeginDatum.Text) Then
        MsgBox ("Geef een geldige datum in.")
        Cancel = True
    End If
End Sub

Private Sub EindDatum_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If Not IsDate(EindDatum.Text) Then
        MsgBox ("Geef een geldige datum in.")
        Cancel = True
    End If
End Sub
 
Voorkomen is beter dan genezen.
Iets meer nadenken, iets minder coderen.
 

Bijlagen

Laatst bewerkt:
Voorkomen is beter dan genezen.
Iets meer nadenken, iets minder coderen.

Hele mooie oplossing, kort vraagje, hoe kan ik het voor elkaar krijgen dat in het veld begindatum alleen de eerste van de maand geselecteerd kan worden (01-01-2015) en in het veld einddatum alleen het einde van de maand (31-01-2015)
Heel erg bedankt voor je reactie.
 
1. van welke maand ?
2. dan heb je toch aan 1 combobox genoeg ? (nl. om de maand te kiezen, de eerste dag en de laatste dag van die maand kunnen we dan eenvoudig berekenen.)

Kijk per ongeluk ook nog eens hier waarmee en hoe je een combobox kunt vullen:

http://www.snb-vba.eu/VBA_Fill_combobox_listbox.html
 
Laatst bewerkt:
1. van welke maand ?
2. dan heb je toch aan 1 combobox genoeg ? (nl. om de maand te kiezen, de eerste dag en de laatste dag van die maand kunnen we dan eenvoudig berekenen.)

Kijk per ongeluk ook nog eens hier waarmee en hoe je een combobox kunt vullen:

http://www.snb-vba.eu/VBA_Fill_combobox_listbox.html

De datum kan niet berekend worden. Omdat men som 2 maanden kan kiezen of 3 enz. Het gaat dus in het veld begin datum om de eerste van de maand voor het jaar 2015 en in het veld eind datum om de laatste dag van de maand in het jaar 2015.
Ik zal vanavond naar de link kijken.

Bedankt voor je reactie
 
De eerste van de eerste maand en de laatste van de laatste maand kunnen altijd berekend worden.
 
Beste SNB,

Jouw oplossing werkt goed. Ik heb alleen klein vraagje. Als je bij het userform de begin- en einddatum hebt ingevoerd en dan op de buton Vervolg. Dan blijft het userform open staan. Pas als je op de button stop drukt wordt de macro uitgevoerd en verdwijnt het userform. Ik heb de code bijgevoegd. Wat moet ik veranderen zodat wanneer ik op de button vervolg druk de macro wordt uitgevoerd en het userform wordt afgesloten?


Code:
Private Sub UserForm_Initialize()
    begin.List = Sheets("Datum").Cells(1).CurrentRegion.Value
End Sub

Private Sub begin_Change()
    If begin.ListIndex > -1 Then
        eind.List = Sheets("Datum").Cells(1, 6).CurrentRegion.Value
        eind.Visible = True
    End If
End Sub
Private Sub eind_Change()
    knop_vervolg.Visible = eind.ListIndex > -1
End Sub

Private Sub knop_vervolg_Click()
    Sheets("Definitie").Cells(10, 12) = CDate(begin.Value)
    Sheets("Definitie").Cells(14, 12) = CDate(eind.Value)
End Sub

Private Sub knop_stop_Click()
    Unload UserForm1
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If knop_vervolg.Visible = True Then knop_vervolg = True
    Application.Run "'ExSION.xlam'!MENU_DATA"


End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan