VBA Maximaal 1 keer hetzelfde nummer invoeren

Status
Niet open voor verdere reacties.

conradstanen

Gebruiker
Lid geworden
15 jan 2020
Berichten
11
Beste,
Voor mijn stageopdracht ben ik bezig met het maken van een vba userform die gegevens van onze machines registreert in een excel bestand.
De eerste textbox die ingevuld moet worden is het serienummer, ik heb ook een functie erin die dat serienummer weer kan opzoeken en alle gegevens terug in het form zet.
Ik loop alleen tegen een probleem aan.

Het probleem is dat ik niet wil dat hetzelfde serienummer 2 keer word ingevuld.
Als er een nieuw serienummer word ingevuld wil ik dat hij een nieuwe regel maakt in het excel bestand,
Als hetzelfde serienummer word ingevuld wil ik dat hij de bestaande regel aanpast.
Kan iemand mij uitleggen wat ik hiervoor moet doen?

Dat zou mij erg helpen,
Mvg, Rinus Huisman
 
Plaats een voorbeeld document.
 
Beste,
Welk document bedoelt u als voorbeeld?
Dit is in ieder geval de code die ik gebruik om de gegevens naar het bestand te sturen:
Code:
Private Sub CommandButton2_Click()
 
 
 
 Dim password As Variant

password = Application.InputBox("Wachtwoord:", "Wachtwoord beveiligde actie")

Select Case password

Case Is = False

    'do nothing

Case Is = "Conrad"

 
 Dim wks As Worksheet
   Dim AddNew As Range
   
Set wks = Blad1

Set AddNew = wks.Range("A65356").End(xlUp).Offset(1, 0)
    AddNew.Offset(0, 0).Value = Txtserie.Text
    AddNew.Offset(0, 1).Value = txtmachine.Text
    AddNew.Offset(0, 2).Value = txtklant.Text
    AddNew.Offset(0, 3).Value = txtdatum.Text
    AddNew.Offset(0, 4).Value = txtaandrijfkoppelh.Text
    AddNew.Offset(0, 5).Value = txtaandrijfkoppell.Text
    AddNew.Offset(0, 6).Value = txtaandrijfkoppelhomw.Text
    AddNew.Offset(0, 7).Value = txtaandrijfkoppellomw.Text
    AddNew.Offset(0, 8).Value = txtlosbreekkoppel.Text
    AddNew.Offset(0, 9).Value = txtdoorlaat.Text
    AddNew.Offset(0, 10).Value = txttrekkrachtdan.Text
    AddNew.Offset(0, 11).Value = txtdrukkrachtdan.Text
    AddNew.Offset(0, 12).Value = txttrekkrachtbar.Text
    AddNew.Offset(0, 13).Value = txtdrukkrachtbar.Text
    AddNew.Offset(0, 14).Value = txttrekkrachtlierdan.Text
    AddNew.Offset(0, 15).Value = txtkabellcm.Text
    AddNew.Offset(0, 16).Value = txtkabeldmm.Text
    AddNew.Offset(0, 17).Value = Txtmaxdeb.Text
    AddNew.Offset(0, 18).Value = txtmaxdrukbar.Text
    AddNew.Offset(0, 19).Value = txttoerentalrpm.Text
    AddNew.Offset(0, 20).Value = txttypeolie.Text
    AddNew.Offset(0, 21).Value = txtdiawater.Text
    AddNew.Offset(0, 22).Value = txtlengtewater1.Text
    AddNew.Offset(0, 23).Value = txtlengtewater2.Text
    AddNew.Offset(0, 24).Value = txtflow.Text
    AddNew.Offset(0, 25).Value = txttypebuis.Text
                   


ListBox1.ColumnCount = 10
ListBox1.RowSource = "A1:J65356"

Case Else

MsgBox "Fout, raadpleeg werkplaatschef"

End Select

ThisWorkbook.Save

End Sub
 
Laatst bewerkt:
Met een voorbeeld document wordt een Excel document bedoeld.
 
Knipsel.PNG



Dit is een printscreen van het document, Het gaat om de rij van het objectnummer.
Ik hoop dat u hier wat aan heeft
 
Dat is nog steeds geen Excel document.
 
Dit is het bestand
 

Bijlagen

  • voorbeel data.xlsm
    32,8 KB · Weergaven: 17
Laatst bewerkt:
Zet dit achter het Userform:
Code:
Private Sub Txtserie_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Set c = Sheets("Blad1").Range("A:A").Find(Txtserie.Text)
    If Not c Is Nothing Then
        MsgBox "Serienummer bestaat reeds op regel " & c.Row
    End If
End Sub

In plaats van de MsgBox kan je daar doen wat je dan wilt.
 
Dit werkt zo inderdaad, bedankt!
Maar is er ook een optie om de regel die hetzelfde serienummer bevat aan te passen?
Zo kunnen de monteurs later nog bepaalde gegevens aan te passen. nu word er een nieuwe regel aangemaakt, dan zou het 1 grote rotzooi worden.
 
Je kan daarmee toch direct de gegevens ophalen en in het Userform tonen op de juiste plekken?
Bij het opslaan kan je dezelfde methode gebruiken om de bijgewerkte gegevens op die regel weg te schrijven.
 
Ik snap wat u bedoelt nu, weet u de code om die bestaande rij te overschrijven?
 
Laatst bewerkt:
Dat is precies wat ik aangaf.
Verwijder de MsgBox opdracht en plaats op die plek de benodigde code om de gegevens uit de gevonden regel (c.Row) in het Userform te laden.

Bij het opslaan kan je diezelfde methode weer gebruiken om de regel op te halen waar de gegevens geschreven moeten worden.
 
Ja ik snap wat u bedoelt,
Ik ben alleen nog niet erg thuis is vba, Welke code moet ik toevoegen om dit voor elkaar te krijgen? is dat deze? zo ja hoe moet ik hem aanpassen dat hij geen error geeft?
Set AddNew = wks.Range("A65356").End(xlUp).Offset(1, 0)
Code:
AddNew.Offset(0, 0).Value = Txtserie.Text
    AddNew.Offset(0, 1).Value = txtmachine.Text
    AddNew.Offset(0, 2).Value = txtklant.Text
    AddNew.Offset(0, 3).Value = txtdatum.Text
    AddNew.Offset(0, 4).Value = txtaandrijfkoppelh.Text
    AddNew.Offset(0, 5).Value = txtaandrijfkoppell.Text
    AddNew.Offset(0, 6).Value = txtaandrijfkoppelhomw.Text
    AddNew.Offset(0, 7).Value = txtaandrijfkoppellomw.Text
    AddNew.Offset(0, 8).Value = txtlosbreekkoppel.Text
    AddNew.Offset(0, 9).Value = txtdoorlaat.Text
    AddNew.Offset(0, 10).Value = txttrekkrachtdan.Text
    AddNew.Offset(0, 11).Value = txtdrukkrachtdan.Text
    AddNew.Offset(0, 12).Value = txttrekkrachtbar.Text
    AddNew.Offset(0, 13).Value = txtdrukkrachtbar.Text
    AddNew.Offset(0, 14).Value = txttrekkrachtlierdan.Text
    AddNew.Offset(0, 15).Value = txtkabellcm.Text
    AddNew.Offset(0, 16).Value = txtkabeldmm.Text
    AddNew.Offset(0, 17).Value = Txtmaxdeb.Text
    AddNew.Offset(0, 18).Value = txtmaxdrukbar.Text
    AddNew.Offset(0, 19).Value = txttoerentalrpm.Text
    AddNew.Offset(0, 20).Value = txttypeolie.Text
    AddNew.Offset(0, 21).Value = txtdiawater.Text
    AddNew.Offset(0, 22).Value = txtlengtewater1.Text
    AddNew.Offset(0, 23).Value = txtlengtewater2.Text
    AddNew.Offset(0, 24).Value = txtflow.Text
    AddNew.Offset(0, 25).Value = txttypebuis.Text
 
Laatst bewerkt:
Beste,
Ik loop nog tegen een probleem aan. De code werkt in principe goed, alleen springt hij ook op een bestaand serienummer als er maar een deel van het serienummer ingevoerd word.
Als bijvoorbeeld het serienummer 123456 ingevoerd is.
En later het serienummer 12345 ingevoerd word. Springt hij naar het serienummer die al ingevoerd is (123456) en vervangt hij die regel.
Is er nog een manier om te zorgen dat hij alleen naar het serienummer springt als het volledige nummer ingevoerd word?
 
Code:
Sheets("Blad1").Range("A:A").Find(Txtserie.Text,,,xlwhole)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan