uniek volgnummer

Status
Niet open voor verdere reacties.

Schipper1994

Gebruiker
Lid geworden
10 mrt 2021
Berichten
158
Hey,
hier ben ik weer met een voor jullie waarschijnlijk heel simpele vraag.

ik heb een Tabel die word ingevuld door een VBA userform.

nu wil ik in kolom A een uniek nummer hebben.

mijn Userform geeft hem wel een uniek nummer maar ik wil ook een beveiliging dat er een melding komt dat het nummer al bestaat.
de reden, ik wil in het Userform het nummer kunnen aanpassen voor wanneer het wel nodig zou moeten zijn daarom die beveiliging.


ik hoop dat ik het goed uitleg, anders maak ik nog een voorbeeldbestandje.
 
Begin maar met een bestandje, want dit is niet erg duidelijk. Om te beginnen moet ik al raden naar het programma waarin je dit wilt doen (eerste gok: Excel). Ten tweede: als het rijnummer niet voldoet (=Rij()-1 bijvoorbeeld, wat voor elke regel al een uniek nummer oplevert), waaraan moet het nummer dan wél voldoen?
 
zoals gevraagd,

u zal zien in de userform kan het nummer nog aangepast worden..
dit is de bedoeling. maar ik wil niet dat er 2 de zelfde nummers kunnen komen in die tabel.
dit gaat normaal gesproken over een supergrote tabel. dus enkel in rij A zal een 'uniek nummer' komen te staan.

ik wil dus een foutmelding als ik op toevoegen klik als er al een nummer is die het zelfde is als de ingevoerde.
 

Bijlagen

  • testbestand uniek nummer.xlsm
    22,5 KB · Weergaven: 29
Je kan dit er tussen zetten voor die controle:
Code:
Set c = Range("A2:A" & irow).Find(TextBox1.Text, , , xlWhole)
If Not c Is Nothing Then
    MsgBox "Nummer " & TextBox1.Text & " is reeds aanwezig.", vbCritical
    Exit Sub
End If
 
in het voorbeeldbestandje zit deze code

Code:
Private Sub CommandButton1_Click()
    Dim irow As Long
    Dim ws As Worksheet
    Set ws = Worksheets("blad1")


    
    'laatste lijn zoeken
    irow = ws.Cells.Find(what:="*", Searchorder:=xlRows, _
        Searchdirection:=xlPrevious, LookIn:=xlValues).Row + 1
        


    'data kopieren
    ws.Cells(irow, 1).Value = Me.TextBox1.Value
    ws.Cells(irow, 2).Value = Me.TextBox2.Value
Unload Me

End Sub

waar moet ik de jouwe dan tussen steken? ik krijg nu foutmelding op

Code:
Set c = Range("A2:A" & irow).Find(TextBox1.Text, , , xlWhole)
 
kheb het gevonden.. bedankt.

Code:
Private Sub CommandButton1_Click()
    Dim irow As Long
    Dim ws As Worksheet
    Set ws = Worksheets("blad1")


    
    'laatste lijn zoeken
    irow = ws.Cells.Find(what:="*", Searchorder:=xlRows, _
        Searchdirection:=xlPrevious, LookIn:=xlValues).Row + 1
        
Set c = Range("A2:A" & irow).Find(TextBox1.Text, , , xlWhole)
If Not c Is Nothing Then
    MsgBox "Nummer " & TextBox1.Text & " is reeds aanwezig.", vbCritical
    Exit Sub
End If

    'data kopieren
    ws.Cells(irow, 1).Value = Me.TextBox1.Value
    ws.Cells(irow, 2).Value = Me.TextBox2.Value
Unload Me

End Sub
 
in het testbestand werkt het, in mijn eigen bestand niet.
de range is daar ook A2:A enkel is dat unieke nummer dat ik dan nodig heb van Textbox2. maar dat heb ik ook aangepast. eventueel hier nog een antwoord op?
 
oke nu werkt het ook in mijn eigen bestand.
hoe?? ik zou het niet weten ik heb wat geexperimenteerd met andere code die ik al gebruikte om een lijn te zoeken en te verwijderen en dit werkte.
ik gebruik nu deze code
Code:
Set c = ws.Cells.Find(TextBox2.Value, , , xlWhole)
If Not c Is Nothing Then
    MsgBox "Nummer " & TextBox2.Value & " is reeds aanwezig.", vbCritical
  Exit Sub
End If
 
Je zou nog iets kunnen gebruiken als:

Code:
Textbox2.Value = WorksheetFunction.Max(Blad1.Range("A:A")) +1

Dan wel de TextBox2 op Enabled = False zetten. Dan kun je geen twee keer hetzelfde nummer invoeren. Je kunt de TextBox ook onzichtbaar maken.
 
ok bedankt,

hij werkt nu zoals ik het wil.

dus ik ga hem zo houden.


ik moet ook het nummer zelf kunnen aanpassen als het eventueel nodig is, daarom dat ik hem zeker niet wil locken of verbergen.
 
Mosterd na de maaltijd wellicht, gezien de reacties, maar ik had zelf ook nog een poging gewaagd om e.e.a. wat logischer te maken, en die opzet wil ik je niet onthouden :).
In het bestand controleer ik namelijk niet alleen op de hoogste waarde, en of de waarde al is ingevoerd, maar kijk ik ook naar gaten in de reeks, en die kun je dan gebruiken om nieuwe nummers te genereren. Wellicht heb je er wat aan.
 

Bijlagen

  • testbestand uniek nummer.xlsm
    26,5 KB · Weergaven: 36
goto Hell, dat is anders ook nog een leuke label.
Bubblesort is toch wat achterhaald, je kan beter een andere tool gebruiken, https://excelmacromastery.com/vba-arraylist/
arrS is wel iets anders gedimensioneerd, dus dat stuk moet je nog aanpassen
Code:
   With ws
      Set rng = .Range(.Cells(2, 1), .Cells(2, 1).End(xlDown))
      arr = rng
     [COLOR="#FF0000"] Set List = CreateObject("System.Collections.ArrayList")
      For i = 1 To UBound(arr)                                  'alle gegevens aflopen
         List.Add arr(i, 1)                                     'toevoegen aan arraylist
      Next
      List.Sort                                                 'sorteren oplopend
   Rem List.Reverse 'eventueel aflopend !!!
      arrS = List.toarray[/COLOR]
      For i = LBound(arrS) To UBound(arrS)
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan