• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Code

Status
Niet open voor verdere reacties.

Jack Nouws

Terugkerende gebruiker
Lid geworden
16 apr 2008
Berichten
1.396
Hallo

Ik heb met behulp van deze code een boeking in werking gesteld. Het werkt vrij aardig maar wanneer er een boeking plaats gevonden heeft wordt er gevraagd of er nog een boeking moet gebeuren. En dan gaat het fout, er wordt nl. 2x gevraagd of er nog een boeking moet plaats vinden. En dat is niet de bedoeling. kan iemand zo zien in de code waar het fout gaat?

Met vr gr
Jack
Code:
Private Sub OptionFalse()
Set MyRange = Worksheets(FrmOverschrijving.TxtVanBron.Value)
Set MyRange2 = Worksheets(FrmOverschrijving.TxtNaarBron.Value)

'schermwisseling uitschakelen (flikkeren beeldscherm)
Application.ScreenUpdating = False
legeregel = MyRange.Range("B" & Rows.Count).End(xlUp).Row + 1
legeregel2 = MyRange2.Range("B" & Rows.Count).End(xlUp).Row + 1

If TxtOmschrijving = Empty Then
    MsgBox "Voer 'minimaal' een Omschrijving in!", vbExclamation, "Omschrijving"
    TxtOmschrijving.SetFocus
    
Else
    MyRange.Range("B" & legeregel) = Format(TxtDatum.Value, "mm/dd/yyyy")
    MyRange.Range("D" & legeregel) = FrmOverschrijving.TxtOmschrijving.Value
    MyRange.Range("F" & legeregel) = FrmOverschrijving.CboVanBron.Text
    MyRange.Range("G" & legeregel) = FrmOverschrijving.CboNaarBron.Value
    MyRange.Range("I" & legeregel) = FrmOverschrijving.TxtInkomsten.Value
    MyRange.Range("J" & legeregel) = FrmOverschrijving.TxtUitgaven.Value

    MyRange2.Range("B" & legeregel2) = Format(TxtDatum.Value, "mm/dd/yyyy")
    MyRange2.Range("D" & legeregel2) = FrmOverschrijving.TxtOmschrijving.Value
    MyRange2.Range("F" & legeregel2) = FrmOverschrijving.CboVanBron.Text
    MyRange2.Range("G" & legeregel2) = FrmOverschrijving.CboNaarBron.Value
    MyRange2.Range("I" & legeregel2) = FrmOverschrijving.TxtInkomsten.Value
    MyRange2.Range("J" & legeregel2) = FrmOverschrijving.TxtUitgaven.Value

    MsgBox "Er is van Bron " & CboVanBron & " naar Bron " & CboNaarBron & " geboekt! "

End If

response = MsgBox("Wilt u nog een meer Boeken?", vbYesNo, Title:="Gegevens opslaan?")
    If response = vbNo Then
        Unload Me
    Else
        Dim Ctl As Control
            For Each Ctl In FrmOverschrijving.Controls
               If TypeOf Ctl Is MSForms.TextBox Or TypeOf Ctl Is MSForms.ComboBox Then
                Ctl.Text = ""
                End If
            Next
             TxtDatum.Text = Format(Date, "dd/mm/yyyy")
         CboNaarBron.Value = "Kies Bron"
          CboVanBron.Value = "Kies Bron"
          CboVanBron.SetFocus
End If
'Schermwisseling terug inschakelen
Application.ScreenUpdating = True
    ActiveSheet.Unprotect

End Sub
 
Bij mij wordt maar 1 keer gevraagd of ik nog een boeking wilt doen.
Echter, ik zou de End...If verplaatsen.
Code:
    MsgBox "Er is van Bron " & CboVanBron & " naar Bron " & CboNaarBron & " geboekt! "

[B]End If[/B]

response = MsgBox("Wilt u nog een meer Boeken?", vbYesNo, Title:="Gegevens opslaan?")

Stel dat je namelijk geen omschrijving hebt ingevuld dan krijg je een melding, maar vervolgens de vraag of je nóg een boeking wilt doen. Dat lijkt mij niet logisch.
Ik zou derhalve de End...If bij de andere End...If onderaan zetten.
Zo blijft het menu zichtbaar nadat de gebruiker op OK heeft geklikt en kan de aanvullende gegevens worden ingevoerd.

Er staan overigens nog een topic van je open die ook betrekking heeft op deze code.

Met vriendelijke groet,


Roncancio
 
Laatst bewerkt:
Ok

Dan heb ik nog een vraag.
Is het gebruikelijk hoe je vanuit een optionbutton op deze manier je code verder afhandeld?

Met vr gr
Jack

Code:
Private Sub CmdOK_Click()
    If OptionButton1 = True Then
        OptionTrue
    End If
    
    If OptionButton1 = False Then
        OptionFalse
    End If
End Sub
Private Sub OptionTrue()
Set MyRange = Worksheets(FrmOverschrijving.TxtVanBron.Value)
Set MyRange2 = Worksheets(FrmOverschrijving.TxtNaarBron.Value)

'schermwisseling uitschakelen (flikkeren beeldscherm)
Application.ScreenUpdating = False
legeregel = MyRange.Range("B" & Rows.Count).End(xlUp).Row + 1
legeregel2 = MyRange2.Range("B" & Rows.Count).End(xlUp).Row + 1

If TxtOmschrijving = Empty Then
    MsgBox "Voer 'minimaal' een Omschrijving in!", vbExclamation, "Omschrijving"
    TxtOmschrijving.SetFocus
    
Else
    MyRange.Range("B" & legeregel) = Format(TxtDatum.Value, "mm/dd/yyyy")
    MyRange.Range("D" & legeregel) = FrmOverschrijving.TxtOmschrijving.Value
    MyRange.Range("F" & legeregel) = FrmOverschrijving.CboVanBron.Text
    MyRange.Range("G" & legeregel) = FrmOverschrijving.CboNaarBron.Value
    MyRange.Range("I" & legeregel) = FrmOverschrijving.TxtInkomsten.Value
    MyRange.Range("J" & legeregel) = FrmOverschrijving.TxtUitgaven.Value

    MyRange2.Range("B" & legeregel2) = Format(TxtDatum.Value, "mm/dd/yyyy")
    MyRange2.Range("D" & legeregel2) = FrmOverschrijving.TxtOmschrijving.Value
    MyRange2.Range("F" & legeregel2) = FrmOverschrijving.CboVanBron.Text
    MyRange2.Range("G" & legeregel2) = FrmOverschrijving.CboNaarBron.Value
    MyRange2.Range("J" & legeregel2) = FrmOverschrijving.TxtInkomsten.Value
    MyRange2.Range("I" & legeregel2) = FrmOverschrijving.TxtUitgaven.Value

    MsgBox "Er is van Bron " & CboVanBron & " naar Bron " & CboNaarBron & " geboekt! "
  
response = MsgBox("Wilt u nog een meer Boeken?", vbYesNo, Title:="Gegevens opslaan?")
    If response = vbNo Then
        Unload Me
    Else
        Dim Ctl As Control
            For Each Ctl In FrmOverschrijving.Controls
               If TypeOf Ctl Is MSForms.TextBox Or TypeOf Ctl Is MSForms.ComboBox Then
                Ctl.Text = ""
                End If
            Next
            
            TxtDatum.Text = Format(Date, "dd/mm/yyyy")
        CboNaarBron.Value = "Kies Bron"
         CboVanBron.Value = "Kies Bron"
         CboVanBron.SetFocus
    End If
End If
'Schermwisseling terug inschakelen
Application.ScreenUpdating = True
    ActiveSheet.Unprotect
End Sub
Private Sub OptionFalse()
Set MyRange = Worksheets(FrmOverschrijving.TxtVanBron.Value)
Set MyRange2 = Worksheets(FrmOverschrijving.TxtNaarBron.Value)

'schermwisseling uitschakelen (flikkeren beeldscherm)
Application.ScreenUpdating = False
legeregel = MyRange.Range("B" & Rows.Count).End(xlUp).Row + 1
legeregel2 = MyRange2.Range("B" & Rows.Count).End(xlUp).Row + 1

If TxtOmschrijving = Empty Then
    MsgBox "Voer 'minimaal' een Omschrijving in!", vbExclamation, "Omschrijving"
    TxtOmschrijving.SetFocus
    
Else
    MyRange.Range("B" & legeregel) = Format(TxtDatum.Value, "mm/dd/yyyy")
    MyRange.Range("D" & legeregel) = FrmOverschrijving.TxtOmschrijving.Value
    MyRange.Range("F" & legeregel) = FrmOverschrijving.CboVanBron.Text
    MyRange.Range("G" & legeregel) = FrmOverschrijving.CboNaarBron.Value
    MyRange.Range("I" & legeregel) = FrmOverschrijving.TxtInkomsten.Value
    MyRange.Range("J" & legeregel) = FrmOverschrijving.TxtUitgaven.Value

    MyRange2.Range("B" & legeregel2) = Format(TxtDatum.Value, "mm/dd/yyyy")
    MyRange2.Range("D" & legeregel2) = FrmOverschrijving.TxtOmschrijving.Value
    MyRange2.Range("F" & legeregel2) = FrmOverschrijving.CboVanBron.Text
    MyRange2.Range("G" & legeregel2) = FrmOverschrijving.CboNaarBron.Value
    MyRange2.Range("I" & legeregel2) = FrmOverschrijving.TxtInkomsten.Value
    MyRange2.Range("J" & legeregel2) = FrmOverschrijving.TxtUitgaven.Value

    MsgBox "Er is van Bron " & CboVanBron & " naar Bron " & CboNaarBron & " geboekt! "



response = MsgBox("Wilt u nog een meer Boeken?", vbYesNo, Title:="Gegevens opslaan?")
    If response = vbNo Then
        Unload Me
    Else
        Dim Ctl As Control
            For Each Ctl In FrmOverschrijving.Controls
               If TypeOf Ctl Is MSForms.TextBox Or TypeOf Ctl Is MSForms.ComboBox Then
                Ctl.Text = ""
                End If
            Next
             TxtDatum.Text = Format(Date, "dd/mm/yyyy")
         CboNaarBron.Value = "Kies Bron"
          CboVanBron.Value = "Kies Bron"
          CboVanBron.SetFocus
    End If
End If
'Schermwisseling terug inschakelen
Application.ScreenUpdating = True
    ActiveSheet.Unprotect

End Sub
 
Ok

Dan heb ik nog een vraag.
Is het gebruikelijk hoe je vanuit een optionbutton op deze manier je code verder afhandeld?

Met vr gr
Jack

Nee, integendeel zelfs.
Optionbutton geeft de gebruiker de mogelijkheid om een keuze te maken. Het is niet de bedoeling om de rest van de code af te laten handelen. Stel dat men als eerste de optionbutton aanklikt dan zal de macro al gaan draaien. Dit verwacht men bij een knop.
Wat wel kan is dat door een bepaalde keuze, bepaalde waardes en/of besturingselementen zichtbaar dan wel onzichtbaar zijn.

Bijv.:
De Optionbutton voor Getrouwd wordt geselecteerd en het veld Naam Echtgenote wordt actief of zichtbaar.

Als alles is ingevuld, dan klikt men op een knop om de macro te starten.
Dat is gebruikelijk.

Met vriendelijke groet,


Roncancio
 
Laatst bewerkt:

Dat wordt weer een paar dagen puzzelen dan. Of jij moet nog ambitie hebben?

Met vr gr
Jack
 
Dat puzzelen hoeft niet zo lang te duren.
Ambities heb ik altijd.:p

Met vriendelijke groet,


Roncancio

Ik ben op dit uitgekomen
Code:
Private Sub CmdOK_Click()
Set MyRange = Worksheets(FrmOverschrijving.TxtVanBron.Value)
Set MyRange2 = Worksheets(FrmOverschrijving.TxtNaarBron.Value)

'schermwisseling uitschakelen (flikkeren beeldscherm)
Application.ScreenUpdating = False
'ActiveSheet.Unprotect

 legeregel = MyRange.Range("B" & Rows.Count).End(xlUp).Row + 1
legeregel2 = MyRange2.Range("B" & Rows.Count).End(xlUp).Row + 1

If TxtOmschrijving = Empty Then
    MsgBox "Voer 'minimaal' een Omschrijving in!", vbExclamation, "Omschrijving"
    TxtOmschrijving.SetFocus
  End If
If OptionButton1 = True Then
    MyRange.Range("B" & legeregel) = Format(TxtDatum.Value, "mm/dd/yyyy")
    MyRange.Range("D" & legeregel) = FrmOverschrijving.TxtOmschrijving.Value
    MyRange.Range("F" & legeregel) = FrmOverschrijving.CboVanBron.Text
    MyRange.Range("G" & legeregel) = FrmOverschrijving.CboNaarBron.Value
    MyRange.Range("I" & legeregel) = FrmOverschrijving.TxtInkomsten.Value
    MyRange.Range("J" & legeregel) = FrmOverschrijving.TxtUitgaven.Value

    MyRange2.Range("B" & legeregel2) = Format(TxtDatum.Value, "mm/dd/yyyy")
    MyRange2.Range("D" & legeregel2) = FrmOverschrijving.TxtOmschrijving.Value
    MyRange2.Range("F" & legeregel2) = FrmOverschrijving.CboVanBron.Text
    MyRange2.Range("G" & legeregel2) = FrmOverschrijving.CboNaarBron.Value
    MyRange2.Range("J" & legeregel2) = FrmOverschrijving.TxtInkomsten.Value
    MyRange2.Range("I" & legeregel2) = FrmOverschrijving.TxtUitgaven.Value
    
    MsgBox "Er is van Bron " & CboVanBron & " naar Bron " & CboNaarBron & " geboekt! "
    response = MsgBox("Wilt u nog een meer Boeken?", vbYesNo, Title:="Gegevens opslaan?")
    
        If response = vbNo Then
            Unload Me
        Else
        Dim Ctl As Control
            For Each Ctl In FrmOverschrijving.Controls
               If TypeOf Ctl Is MSForms.TextBox Or TypeOf Ctl Is MSForms.ComboBox Then
                    Ctl.Text = ""
                End If
            Next
                TxtDatum.Text = Format(Date, "dd/mm/yyyy")
                CboNaarBron.Value = "Kies Bron"
                CboVanBron.Value = "Kies Bron"
                CboVanBron.SetFocus
        End If
End If

If OptionButton1 = False Then
    
    MyRange.Range("B" & legeregel) = Format(TxtDatum.Value, "mm/dd/yyyy")
    MyRange.Range("D" & legeregel) = FrmOverschrijving.TxtOmschrijving.Value
    MyRange.Range("F" & legeregel) = FrmOverschrijving.CboVanBron.Text
    MyRange.Range("G" & legeregel) = FrmOverschrijving.CboNaarBron.Value
    MyRange.Range("I" & legeregel) = FrmOverschrijving.TxtInkomsten.Value
    MyRange.Range("J" & legeregel) = FrmOverschrijving.TxtUitgaven.Value

    MyRange2.Range("B" & legeregel2) = Format(TxtDatum.Value, "mm/dd/yyyy")
    MyRange2.Range("D" & legeregel2) = FrmOverschrijving.TxtOmschrijving.Value
    MyRange2.Range("F" & legeregel2) = FrmOverschrijving.CboVanBron.Text
    MyRange2.Range("G" & legeregel2) = FrmOverschrijving.CboNaarBron.Value
    MyRange2.Range("I" & legeregel2) = FrmOverschrijving.TxtInkomsten.Value
    MyRange2.Range("J" & legeregel2) = FrmOverschrijving.TxtUitgaven.Value
     
    MsgBox "Er is van Bron " & CboVanBron & " naar Bron " & CboNaarBron & " geboekt! "
    response = MsgBox("Wilt u nog een meer Boeken?", vbYesNo, Title:="Gegevens opslaan?")
    
        If response = vbNo Then
            Unload Me
        Else
            For Each Ctl In FrmOverschrijving.Controls
                If TypeOf Ctl Is MSForms.TextBox Or TypeOf Ctl Is MSForms.ComboBox Then
                    Ctl.Text = ""
                End If
            Next
                TxtDatum.Text = Format(Date, "dd/mm/yyyy")
                CboNaarBron.Value = "Kies Bron"
                CboVanBron.Value = "Kies Bron"
                CboVanBron.SetFocus
        End If
End If
'Schermwisseling terug inschakelen
Application.ScreenUpdating = True
'ActiveSheet.protect
End Sub

Met vr gr
Jack
 
Wat is precies de bedoeling van het programma?

Met vriendelijke groet,


Roncancio
 
Wat is precies de bedoeling van het programma?

Met vriendelijke groet,


Roncancio

Het is een boekhoud programma. Deze UserForm zorgt er voor dat ik kan kiezen, van welke bron (BV Betaalrekening) ik geld afhaal en naar welke bron (BV Auto) het terecht komt. En ik wil tussen Betaal en Spaarrekening over en weer kunnen boeken vandaar die opt.button. Ik heb ongeveer 55 bronnen dus ook 55 tabbladen. Zo is in het kort gezegd wat het programma moet doen.

Met vr gr
Jack
 
Het is een boekhoud programma. Deze UserForm zorgt er voor dat ik kan kiezen, van welke bron (BV Betaalrekening) ik geld afhaal en naar welke bron (BV Auto) het terecht komt. En ik wil tussen Betaal en Spaarrekening over en weer kunnen boeken vandaar die opt.button. Ik heb ongeveer 55 bronnen dus ook 55 tabbladen. Zo is in het kort gezegd wat het programma moet doen.

Met vr gr
Jack

Oké.
Wat is het verschil tussen de optionbutton True of False?
Het punt is namelijk dat de code vrijwel hetzelfde doet ongeacht de waarde van de optionbutton.

Met vriendelijke groet,


Roncancio
 
Oké.
Wat is het verschil tussen de optionbutton True of False?
Het punt is namelijk dat de code vrijwel hetzelfde doet ongeacht de waarde van de optionbutton.

Met vriendelijke groet,


Roncancio

Ik heb er nog eens over na zitten te denken en ik denk dat deze button kan vervallen
Ik heb een bestandje meegepost, bekijk het eens en geef me jou mening hier over aub.

Met vr gr
Jack
 

Bijlagen

Een paar dingen.

- Het werkblad ziet er netjes uit.:thumb:
- Geen optionbutton gebruiken voor Geld Overboeken. Stel dat men zich vergist, dan kan dat niet hersteld worden. Gebruik dus een Checkbox zodat deze aan en uit kan worden gezet.
- Layout van de userform mag wat netter. Het staat nogal rommelig.
- Naar bron? Een bron kan volgens mij geen bestemming zijn. Dus Van en Naar. ffff muggenziften.
- OK staat in de regel bovenaan of als het onderaan is meer in de hoek dan ergens prompt verloren. Nog wat meer muggenziften.:cool:

Met vriendelijke groet,


Roncancio
 
Een paar dingen.

- Layout van de userform mag wat netter. Het staat nogal rommelig.

Met vriendelijke groet,


Roncancio

Als ik zo vrij mag zijn, zou jij voor mij een nette layout van een Userform willen ontwerpen
dat zou voor mij ook mooie een les zijn (ik heb besloten om de optionbutton te laten vervallen)

bvd

Met vr gr
Jack
 
Als ik zo vrij mag zijn, zou jij voor mij een nette layout van een Userform willen ontwerpen
dat zou voor mij ook mooie een les zijn (ik heb besloten om de optionbutton te laten vervallen)

bvd

Met vr gr
Jack

Het is het makkelijkste als je de userform in een leeg bestand zet en dan upload.
Dan hoef ik niet al die besturingselementen aan te maken.

Dus:
- Nieuw (leeg) bestand openen.
- Naar Projectverkenner van VBE
- Selecteer de userform en sleept deze naar het project van het nieuwe bestand.
- De userform is dan automatisch gekopieerd naar het nieuwe bestand.

Met vriendelijke groet,


Roncancio
 
Het is het makkelijkste als je de userform in een leeg bestand zet en dan upload.
Dan hoef ik niet al die besturingselementen aan te maken.

Dus:
- Nieuw (leeg) bestand openen.
- Naar Projectverkenner van VBE
- Selecteer de userform en sleept deze naar het project van het nieuwe bestand.
- De userform is dan automatisch gekopieerd naar het nieuwe bestand.

Met vriendelijke groet,


Roncancio

Bij deze een leeg bestand met userform.
succes

met vr gr
jack
 

Bijlagen

Dat ziet er al een stuk beter uit!

Ik heb de userform aangepast en ook de nodige informatie geschreven in de code.
Ik heb me uitsluitend gericht op de layout van de userform en het programma niet zo zeer op de werking van het programma.

Met vriendelijke groet,


Roncancio
 

Bijlagen

Roncancio,

Heel hartelijk bedankt voor de informatie die je gaf bij het maken van een userform.:thumb:
Ik heb er dan ook dankbaar gebruik van gemaakt.:p

En nu zit ik nog met die code te tobben, samen met dat stukje tekst van jou er bij.
Code:
Private Sub CboNaarBron_Change()
[COLOR="Red"]Dim MyRange             As Variant[/COLOR]
Dim c                          As Range
Dim i                           As Long

'' Geef bij voorkeur in de naam wat voor soort variabele je declareert.
'' Bijv.: [COLOR="red"] Dim sNaam As String[/COLOR]
'' Door de s weet je dat het een Stringvariabele is.
'' De C en de I zeggen dat niet. Je zou zelfs bij de I een Integer verwachten ipv een Longvariabele.
Ik heb nu Dim ws as WorkSheet geprobeerd maar dat is het ook niet volgens mij en wat ik en een Stringvariabele moet stoppen weet ik niet.
Ik hoop dat je me verder opweg wilt helpen.

Met vr gr
Jack
 
Ik heb nu Dim ws as WorkSheet geprobeerd maar dat is het ook niet volgens mij en wat ik en een Stringvariabele moet stoppen weet ik niet.

Code:
Dim str As String
str = "een stuk tekst"
Msgbox str

Code:
Dim ws As Worksheet
Set ws = Sheets(1)
Msgbox ws.Name

Ik zou aanraden om tijdens de verlofperiode een boek over Excel VBA door te spitten.

Wigi
 
Code:
Ik zou aanraden om tijdens de verlofperiode een boek over Excel VBA door te spitten.

Wigi[/QUOTE]
Hallo Wigi

Ik heb hier wel een boek liggen, en dat hoofdstuk over die variabelen snap ik nog steeds niet!
Anders kwam ik niet met deze vraag over die variabele string. En het geen wat jij er bij gezet hebt zegt me nog steeds niets Wigi. Het spijt me maar domme hollanders zijn er ook hoor.:D
maare ... en verder?

Met vr gr
jack
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan