• 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.

VBA commandbutton

Status
Niet open voor verdere reacties.
OK ook bijgevoegd.

Code:
Private Sub CommandButton1_Click()
'waar gaan we opslaan
legeregel = Worksheets("blad2").Range("A" & Rows.Count).End(xlUp).Row + 1
'wat gaan we opslaan
dagmelding = UserForm1.dag.Value
maandmelding = UserForm1.maand.Value
jaarmelding = UserForm1.jaar.Value
datummelding = dagmelding & "-" & maandmelding & "-" & jaarmelding

With UserForm1
datummelding = Format(datummelding, "dd-mm-yyyy")
ingevuld_door = UserForm1.ingevuld_door.Text
machine_nr = UserForm1.machine_nr.Value
shift = UserForm1.shift.Text
Ordernummer = UserForm1.Ordernummer.Text
Klant = UserForm1.Klant.Text
Omschrijving = UserForm1.Omschrijving.Text
onttrekken = UserForm1.onttrekken.Value
extra_papier = UserForm1.extra_papier.Value
controle_pak = UserForm1.controle_pak.Value
Reden = UserForm1.Reden.Text
defect_limit = UserForm1.defect_limit.Value
geschat_aantal = UserForm1.geschat_aantal.Value
Positie = UserForm1.Positie.Text
soort = UserForm1.soort.Value
Pallet1 = UserForm1.Pallet1.Text
Pallet2 = UserForm1.Pallet2.Text
Pallet3 = UserForm1.Pallet3.Text
Pallet4 = UserForm1.Pallet4.Text
Pallet5 = UserForm1.Pallet5.Text
Pallet6 = UserForm1.Pallet6.Text
inhoud = UserForm1.inhoud.Value
End With

If extra_papier = True And Reden = Empty Then
    MsgBox "U heeft aangegeven dat u extra papier heeft aangevraagd, a.u.b. de reden aangeven"
    Exit Sub

Else
With Worksheets("blad2")
    Worksheets("blad2").Range("a" & legeregel) = datummelding
    Worksheets("blad2").Range("b" & legeregel) = ingevuld_door
    Worksheets("blad2").Range("c" & legeregel) = machine_nr
    Worksheets("blad2").Range("d" & legeregel) = shift
    Worksheets("blad2").Range("e" & legeregel) = Ordernummer
    Worksheets("blad2").Range("f" & legeregel) = Klant
    Worksheets("blad2").Range("g" & legeregel) = Omschrijving
    Worksheets("blad2").Range("h" & legeregel) = onttrekken
    Worksheets("blad2").Range("i" & legeregel) = extra_papier
    Worksheets("blad2").Range("j" & legeregel) = controle_pak
    Worksheets("blad2").Range("k" & legeregel) = Reden
    Worksheets("blad2").Range("l" & legeregel) = defect_limit
    Worksheets("blad2").Range("m" & legeregel) = geschat_aantal
    Worksheets("blad2").Range("n" & legeregel) = Positie
    Worksheets("blad2").Range("o" & legeregel) = soort
    Worksheets("blad2").Range("p" & legeregel) = Pallet1
    Worksheets("blad2").Range("q" & legeregel) = Pallet2
    Worksheets("blad2").Range("r" & legeregel) = Pallet3
    Worksheets("blad2").Range("s" & legeregel) = Pallet4
    Worksheets("blad2").Range("t" & legeregel) = Pallet5
    Worksheets("blad2").Range("u" & legeregel) = Pallet6
    Worksheets("blad2").Range("v" & legeregel) = inhoud
    MsgBox "De door u ingevoerde gegevens zijn opgeslagen in het Logboek/QVC"
    UserForm1.Hide
End With

End If

End Sub




Private Sub SpinButton1_Change()
With UserForm1
  Dim i As Integer
  
  For i = 1 To 4
    Choose(i, datummelding, ingevuld_door, machine_nr, shift).Value = Cells(SpinButton1.Value, i).Value
  Next
  If Klant.TextLength = 0 Then Klant.Text = "Nieuw record"
  End With
End Sub



Private Sub UserForm_Click()

End Sub
 
Laatst bewerkt:
Het is de bedoeling van de tweede With dat

Worksheets("blad2")

in de regels ertussen weg kan.

Wigi
 
OK, maar ik moest nog wel even aangeven waar ik moest opslaan, want anders gooit hij alles op het blad waar ik in sta. Bijgevoegd:
Code:
legeregel = Worksheets("blad2").Range("A" & Rows.Count).End(xlUp).Row + 1
Staat nu zo:

Code:
Private Sub CommandButton1_Click()
'waar gaan we opslaan
legeregel = Worksheets("blad2").Range("A" & Rows.Count).End(xlUp).Row + 1
'wat gaan we opslaan
dagmelding = UserForm1.dag.Value
maandmelding = UserForm1.maand.Value
jaarmelding = UserForm1.jaar.Value
datummelding = dagmelding & "-" & maandmelding & "-" & jaarmelding

With UserForm1
datummelding = Format(datummelding, "dd-mm-yyyy")
ingevuld_door = UserForm1.ingevuld_door.Text
machine_nr = UserForm1.machine_nr.Value
shift = UserForm1.shift.Text
Ordernummer = UserForm1.Ordernummer.Text
Klant = UserForm1.Klant.Text
Omschrijving = UserForm1.Omschrijving.Text
onttrekken = UserForm1.onttrekken.Value
extra_papier = UserForm1.extra_papier.Value
controle_pak = UserForm1.controle_pak.Value
Reden = UserForm1.Reden.Text
defect_limit = UserForm1.defect_limit.Value
geschat_aantal = UserForm1.geschat_aantal.Value
Positie = UserForm1.Positie.Text
soort = UserForm1.soort.Value
Pallet1 = UserForm1.Pallet1.Text
Pallet2 = UserForm1.Pallet2.Text
Pallet3 = UserForm1.Pallet3.Text
Pallet4 = UserForm1.Pallet4.Text
Pallet5 = UserForm1.Pallet5.Text
Pallet6 = UserForm1.Pallet6.Text
inhoud = UserForm1.inhoud.Value
End With

If extra_papier = True And Reden = Empty Then
    MsgBox "U heeft aangegeven dat u extra papier heeft aangevraagd, a.u.b. de reden aangeven"
    Exit Sub

Else
With Worksheets("blad2")
legeregel = Worksheets("blad2").Range("A" & Rows.Count).End(xlUp).Row + 1
    Range("a" & legeregel) = datummelding
    Range("b" & legeregel) = ingevuld_door
    Range("c" & legeregel) = machine_nr
    Range("d" & legeregel) = shift
    Range("e" & legeregel) = Ordernummer
    Range("f" & legeregel) = Klant
    Range("g" & legeregel) = Omschrijving
    Range("h" & legeregel) = onttrekken
    Range("i" & legeregel) = extra_papier
    Range("j" & legeregel) = controle_pak
    Range("k" & legeregel) = Reden
    Range("l" & legeregel) = defect_limit
    Range("m" & legeregel) = geschat_aantal
    Range("n" & legeregel) = Positie
    Range("o" & legeregel) = soort
    Range("p" & legeregel) = Pallet1
    Range("q" & legeregel) = Pallet2
    Range("r" & legeregel) = Pallet3
    Range("s" & legeregel) = Pallet4
    Range("t" & legeregel) = Pallet5
    Range("u" & legeregel) = Pallet6
    Range("v" & legeregel) = inhoud
    MsgBox "De door u ingevoerde gegevens zijn opgeslagen in het Logboek/QVC"
    UserForm1.Hide
End With

End If

End Sub




Private Sub SpinButton1_Change()
With UserForm1
  Dim i As Integer
  
  For i = 1 To 4
    Choose(i, datummelding, ingevuld_door, machine_nr, shift).Value = Cells(SpinButton1.Value, i).Value
  Next
  If Klant.TextLength = 0 Then Klant.Text = "Nieuw record"
  End With
End Sub





Private Sub UserForm_Click()

End Sub
 
Zo is het goed:

Code:
Private Sub CommandButton1_Click()
    'wat gaan we opslaan
    dagmelding = UserForm1.dag.Value
    maandmelding = UserForm1.maand.Value
    jaarmelding = UserForm1.jaar.Value
    datummelding = dagmelding & "-" & maandmelding & "-" & jaarmelding

    With UserForm1
        datummelding = Format(datummelding, "dd-mm-yyyy")
        ingevuld_door = .ingevuld_door.Text
        machine_nr = .machine_nr.Value
        shift = .shift.Text
        Ordernummer = .Ordernummer.Text
        Klant = .Klant.Text
        Omschrijving = .Omschrijving.Text
        onttrekken = .onttrekken.Value
        extra_papier = .extra_papier.Value
        controle_pak = .controle_pak.Value
        Reden = .Reden.Text
        defect_limit = .defect_limit.Value
        geschat_aantal = .geschat_aantal.Value
        Positie = .Positie.Text
        soort = .soort.Value
        Pallet1 = .Pallet1.Text
        Pallet2 = .Pallet2.Text
        Pallet3 = .Pallet3.Text
        Pallet4 = .Pallet4.Text
        Pallet5 = .Pallet5.Text
        Pallet6 = .Pallet6.Text
        inhoud = .inhoud.Value
    End With

    If extra_papier = True And Reden = Empty Then
        MsgBox "U heeft aangegeven dat u extra papier heeft aangevraagd, a.u.b. de reden aangeven"
        Exit Sub
    Else

        If defect_limit = "D" And geschat_aantal = Empty Then
            MsgBox "Geschat aantal defecten invullen a.u.b."
            Exit Sub
        Else

            If defect_limit = "L" And geschat_aantal = Empty Then
                MsgBox "Geschat aantal limits invullen a.u.b."
                Exit Sub
            Else

                If datummelding = Empty Or ingevuld_door = Empty Or machine_nr = Empty Or shift = Empty Or Ordernummer = Empty Or Klant = Empty Or Omschrijving = Empty Then
                    MsgBox "Alle ordergegevens zijn verplichte velden, er zijn géén gegevens weggeschreven naar het Logboek/QVC"
                    Exit Sub
                Else
                    With Sheets("blad2")
                        'waar gaan we opslaan
                        legeregel = .Range("A" & Rows.Count).End(xlUp).Row + 1
                        .Range("a" & legeregel) = datummelding
                        .Range("b" & legeregel) = ingevuld_door
                        .Range("c" & legeregel) = machine_nr
                        .Range("d" & legeregel) = shift
                        .Range("e" & legeregel) = Ordernummer
                        .Range("f" & legeregel) = Klant
                        .Range("g" & legeregel) = Omschrijving
                        .Range("h" & legeregel) = onttrekken
                        .Range("i" & legeregel) = extra_papier
                        .Range("j" & legeregel) = controle_pak
                        .Range("k" & legeregel) = Reden
                        .Range("l" & legeregel) = defect_limit
                        .Range("m" & legeregel) = geschat_aantal
                        .Range("n" & legeregel) = Positie
                        .Range("o" & legeregel) = soort
                        .Range("p" & legeregel) = Pallet1
                        .Range("q" & legeregel) = Pallet2
                        .Range("r" & legeregel) = Pallet3
                        .Range("s" & legeregel) = Pallet4
                        .Range("t" & legeregel) = Pallet5
                        .Range("u" & legeregel) = Pallet6
                        .Range("v" & legeregel) = inhoud
                    End With
                    MsgBox "De door u ingevoerde gegevens zijn opgeslagen in het Logboek/QVC"
                    UserForm1.Hide
                End If
            End If
        End If
    End If

    Dim a As Integer, i As Integer

    a = SpinButton1.Value
    For i = 1 To 4
        Cells(a, i).Value = Choose(i, datummelding, ingevuld_door, machine_nr, shift).Value
    Next
    a = a + 1
    If a > SpinButton1.Max Then SpinButton1.Max = a
    SpinButton1.Value = a

End Sub

Private Sub CommandButton2_Click()
'een record terug

    laatsteregel = Worksheets("blad2").Range("A" & Rows.Count).End(xlUp).Row

End Sub

Private Sub SpinButton1_Change()
    Dim i As Integer
    For i = 1 To 4
        Choose(i, datummelding, ingevuld_door, machine_nr, shift).Value = Cells(SpinButton1.Value, i).Value
    Next
    If ingevuld_door.TextLength = 0 Then ingevuld_door.Text = "Nieuw record"
End Sub

En nu zullen we de vraag eens bestuderen...
 
Zet je bestandje hier eens, maakt het veel gemakkelijker voor ons. Maak er evt. fictieve gegevens van.
 
Lijkt me ook handiger.

Hier is het bestand. Bijna klaar, enkel nog wil ik terug kunnen gaan naar een "record"
 

Bijlagen

Probeer dit eens uit. Er wordt gevraagd de regelnummer te geven als je wilt afwijken van de standaard, volgende regel.

Code:
Private Sub CommandButton1_Click()
Dim a As Integer, i As Integer

    'wat gaan we opslaan
    With UserForm1
        dagmelding = .dag.Value
        maandmelding = .maand.Value
        jaarmelding = .jaar.Value
        datummelding = Format(DateValue(dagmelding & " " & maandmelding & " " & jaarmelding), "dd-mm-yyyy")
        ingevuld_door = .ingevuld_door.Text
        machine_nr = .machine_nr.Value
        shift = .shift.Text
        Ordernummer = .Ordernummer.Text
        Klant = .Klant.Text
        Omschrijving = .Omschrijving.Text
        onttrekken = .onttrekken.Value
        extra_papier = .extra_papier.Value
        controle_pak = .controle_pak.Value
        Reden = .Reden.Text
        defect_limit = .defect_limit.Value
        geschat_aantal = .geschat_aantal.Value
        Positie = .Positie.Text
        soort = .soort.Value
        Pallet1 = .Pallet1.Text
        Pallet2 = .Pallet2.Text
        Pallet3 = .Pallet3.Text
        Pallet4 = .Pallet4.Text
        Pallet5 = .Pallet5.Text
        Pallet6 = .Pallet6.Text
        inhoud = .inhoud.Value
    End With

    If extra_papier = True And Reden = Empty Then
        MsgBox "U heeft aangegeven dat u extra papier heeft aangevraagd, a.u.b. de reden aangeven"
        Exit Sub
    End If

    If defect_limit = "D" And geschat_aantal = Empty Then
        MsgBox "Geschat aantal defecten invullen a.u.b."
        Exit Sub
    End If

    If defect_limit = "L" And geschat_aantal = Empty Then
        MsgBox "Geschat aantal limits invullen a.u.b."
        Exit Sub
    ElseIf datummelding = Empty Or ingevuld_door = Empty Or machine_nr = Empty Or shift = Empty Or Ordernummer = Empty Or Klant = Empty Or Omschrijving = Empty Then
            MsgBox "Alle ordergegevens zijn verplichte velden, er zijn géén gegevens weggeschreven naar het Logboek/QVC"
            Exit Sub
        Else
        
        regel = Application.InputBox("Op welke regel wil je opslaan?" & vbNewLine & vbNewLine & _
                    "Standaard wordt de volgende lege regel gekozen, maar je kan hiervan afwijken.", "Regel opgeven", _
                    .Range("A" & Rows.Count).End(xlUp).Row + 1, Type:=1)
            If regel = False Then
                Exit Sub
            Else
            
                With Sheets("blad2")
                    .Range("a" & legeregel) = datummelding
                    .Range("b" & legeregel) = ingevuld_door
                    .Range("c" & legeregel) = machine_nr
                    .Range("d" & legeregel) = shift
                    .Range("e" & legeregel) = Ordernummer
                    .Range("f" & legeregel) = Klant
                    .Range("g" & legeregel) = Omschrijving
                    .Range("h" & legeregel) = onttrekken
                    .Range("i" & legeregel) = extra_papier
                    .Range("j" & legeregel) = controle_pak
                    .Range("k" & legeregel) = Reden
                    .Range("l" & legeregel) = defect_limit
                    .Range("m" & legeregel) = geschat_aantal
                    .Range("n" & legeregel) = Positie
                    .Range("o" & legeregel) = soort
                    .Range("p" & legeregel) = Pallet1
                    .Range("q" & legeregel) = Pallet2
                    .Range("r" & legeregel) = Pallet3
                    .Range("s" & legeregel) = Pallet4
                    .Range("t" & legeregel) = Pallet5
                    .Range("u" & legeregel) = Pallet6
                    .Range("v" & legeregel) = inhoud
                End With
                MsgBox "De door u ingevoerde gegevens zijn opgeslagen in het Logboek/QVC"
                UserForm1.Hide
            End With
        End If
    End If

    a = SpinButton1.Value
    For i = 1 To 4
        Cells(a, i).Value = Choose(i, datummelding, ingevuld_door, machine_nr, shift).Value
    Next
    a = a + 1
    If a > SpinButton1.Max Then SpinButton1.Max = a
    SpinButton1.Value = a

End Sub

Private Sub CommandButton2_Click()
'een record terug

    laatsteregel = Worksheets("blad2").Range("A" & Rows.Count).End(xlUp).Row

End Sub

Private Sub SpinButton1_Change()
    Dim i As Integer
    For i = 1 To 4
        Choose(i, datummelding, ingevuld_door, machine_nr, shift).Value = Cells(SpinButton1.Value, i).Value
    Next
    If ingevuld_door.TextLength = 0 Then ingevuld_door.Text = "Nieuw record"
End Sub

Wigi
 
ik heb het erin gekopieerd, maar als ik op de ga-terug knop druk gebeurt er niks. bij jou wel dan?
 
Ik zie geen ga terug-knop. Waar zou die moeten staan op de userform?
 
op het userform staat een cycle knop (boven opslaan), maar dat zouden ook een aparte heenknop en terugknop kunnen worden.
 
op het userform staat een cycle knop (boven opslaan), maar dat zouden ook een aparte heenknop en terugknop kunnen worden.

Als je de userform invult, en je wilt terug en verder gaan met de knop, dan verlies je de info uit de andere knoppen.
 
gegevens blijven toch gewoon opgeslagen? ik wil ze alleen in kunnen zien...
 
Dan moet je toch maar enkel de velden vullen met de waarden uit de rij, waarvan het nummer overeenkomt met de waarde van de spinbutton? Als je waarden kan wegschrijven in een rij, kan je ze toch ook inlezen?
 
dat bedoel ik ook.

dus dan typ ik....

show.datum.value?
etc.?
 
Laatst bewerkt:
Kruhe

als je weet dat

Code:
Sheets("blad2").Range("p" & legeregel) = Pallet1

en

Code:
Pallet1 = UserForm1.Pallet1.Text

Dit schrijft de inhoud van de textbox in kolom P. Waarom kan je dan niet omgekeerd te werk gaan?
 
Ik bedoelde het eigenlijk als bestandje bijgevoegd:

(in dit bestand zit een cycle-knop en deze werkt; ik heb knop en code naar mijn bestand gekopieerd, namen aangepast, maar het werkt (nog) niet - snap je?)
 

Bijlagen

Laatst bewerkt:
Ik bedoelde het eigenlijk als bestandje bijgevoegd:

En wat moet dit nu weeral betekenen? Ik begin er hoe langer hoe minder van te begrijpen. Indien dat niet snel betert zal ik afhaken hoor.
 
En wat moet dit nu weeral betekenen? Ik begin er hoe langer hoe minder van te begrijpen. Indien dat niet snel betert zal ik afhaken hoor.

Ik probeer de cycle knop in mijn bestand te laten functioneren zoals de knop in het laatst bijgevoegde bestand - that's it ;)
Dus we hebben:
1) mijn bestand met cycle-knop die nog niet werkt
2) ander bestand ook met cycle-knop die wel werkt
 
Ja, wat kan ik hier nu op zeggen? Je zal soortgelijke code moeten schrijven als in de lus in de andere userform. Al heb je nu waarschijnlijk meer dan 4 vakken op je userform.
 
Dag Kruhe,

Dat heet een SpinButton.

De SpinButton.Max is de maximale waarde: SpinButton.Max is laatste volle regel van sheet + 1
SpinButton.Min is de minimale waarde: SpinButton.Min=1 als er geen kop en 2 als er wel een kop bovenaan sheet staat.

Als je op de SpinButton klikt dan wordt de waarde verhoogd c.q. verlaagd en wordt het bijpassende record gelezen en in de textboxen geplaatst zoals hier volgt
For i = 1 To 4
Choose(i, TextBox1, TextBox2, TextBox3, TextBox4).Value = Cells(SpinButton1.Value, i).Value
Next
Als textbox1 leeg is dat wil zeggen de laatste record is nog niet gevuld dan zet hij in die textbox Nieuw record af wat je ook maar wilt.

If TextBox1.TextLength = 0 Then TextBox1.Text = "Nieuw record"

Als je op de commandbutton klikt dan vult jij de cellen met de inhoud van de textboxen enz en als de laatste record wordt gevuld dan hoogt hij SpinButton.Max met één, want dat is dan de nieuwe Record.

Gegroet,

Axel.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan