Avatar billede birdbrain Seniormester
23. januar 2023 - 11:09 Der er 10 kommentarer og
1 løsning

Undgå dubletter

Jeg har en vba kode, som i en userform opretter data ind i en tabel. Jeg vil dog gerne undgå at oprette dubletter, så vil høre om der er nogen der har en løsning på dette, således der der kommer en msg box og samtidig hindrer at oprette dubletten. Håber det er nok info til "opgaven"
koden ser pt således ud.
Private Sub CommandButton6_Click()
lastrow = Worksheets("Ark1").Cells(Rows.Count, 1).End(xlUp).Row
Worksheets("Ark1").Cells(lastrow + 1, 1).Value = TextBox1.Text
Worksheets("Ark1").Cells(lastrow + 1, 2).Value = ComboBox1.Text

ActiveWorkbook.Worksheets("Ark1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Ark1").Sort.SortFields.Add Key:=Range("A2:A20000"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Ark1").Sort
        .SetRange Range("A2:B20000")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

TextBox1.Text = ""
ComboBox1.Text = ""
End Sub
Avatar billede kim1a Ekspert
25. januar 2023 - 07:39 #1
Uden at kende det 100 % så undrer jeg mig over dette:
Key:=Range("A2:A20000"), _

Eftersom du tidligere i din makro har defineret lastrow virker det mystisk at du sorterer på en fast mængde.

Jeg forsøgte at optage find funktionen, men mangler jo skridtet til at fange celle adresse eller fejlmeddelelsen:
    Cells.Find(What:="kim", After:=ActiveCell, LookIn:=xlFormulas2, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Activate
Hvis jeg skulle lave det, ville jeg nok have en kolonne ved siden af dit input så jeg kunne lave et hurtigt simpelt opslag der i tilfælde af det returnerer kolonnen ved siden af så udløser en fejl.

Har du f.eks. en dato på hver linje? Eller måske et antal? Begge dele kan vi bruge - så:
Hvis opslag ny indtastning = antal over 0 så fejl box.
Avatar billede birdbrain Seniormester
25. januar 2023 - 09:24 #2
Det tog dig ikke lang tid, at gennemskue min manglende viden om VBA :-)
Jeg skal indrømme, at selve funktionen med at oprette data er "stjålet" på youtube og sorteringsdelen, er en indspillet makro.
Min opgave går ud på, at kunne oprette en placering af journaler på forskellige lokationer, så kol a = cpr nummer og kol b er den fysiske placering.
Avatar billede birdbrain Seniormester
25. januar 2023 - 09:57 #3
og igen hurra for youtube :-)
fik denne kode til at virke
Private Sub commandbutton6_click()
If Application.WorksheetFunction.CountIf(Range("a:a"), Me.TextBox1) > 0 Then
MsgBox "Journalen findes allerede"
Me.TextBox1.Value = ""
Me.ComboBox1.Value = ""
Exit Sub
Else
Range("a1").End(xlDown).Offset(1, 0).Value = Me.TextBox1.Value
Range("a1").End(xlDown).Offset(1, 1).Value = Me.ComboBox1.Value
Me.TextBox1.Value = ""
End If
End Sub
Avatar billede birdbrain Seniormester
25. januar 2023 - 09:58 #4
Men mange tak til kim1a for at kommentere på mit opslag
Avatar billede kim1a Ekspert
25. januar 2023 - 10:25 #5
Vi lærer alle lidt ad gangen, jeg er selv ikke så stor ekspert som mange andre herinde, men mit forslag vil være følgende:

Dit resultat af userform resultat (cpr antager jeg) kan du lave et simpelt opslag, placeringen af dette er umiddelbart efter du får inputtet fra userform:

Dim strCpr As String ' du har allerede denne variabel i din kode
Dim strResult As String 'denne skal du skabe
InputBox("cpr") = strCpr 'dette er mit forsøg på at skabe din userform

strResult = WorksheetFunction.Lookup(strCpr, Range("A3:A10"), Range("A3:A10")) 'husk at de to ranges skal matche din kolonne med cprnumre - jeg tænker du kan bruge noget med Range("A2:A"&lastrow)

If strResult = strCpr Then
MsgBox ("Cpr eksisterer allerede")
GoTo 1 'her skal du tilbage til at "genstarte" userform - måske er der issues med nulstilling af variable?
End If
Avatar billede kim1a Ekspert
25. januar 2023 - 10:26 #6
Fedt - det var en nemmere løsning.
Avatar billede birdbrain Seniormester
25. januar 2023 - 12:13 #7
Hej igen
Har dog lige dette problem, ved formatering af textbox1(cpr nummer) Format(TextBox1.Text, "0#####-####"), men det virker ikke hvis de sidste fire karakterer er bogstaver, hvilket vi også benytter
Avatar billede kim1a Ekspert
25. januar 2023 - 16:56 #8
Format(TextBox1.Text, "0#####-####") skal vel egentlig være
Format(TextBox1.Text, "000000-xxxx") - tror jeg.
Avatar billede birdbrain Seniormester
26. januar 2023 - 08:58 #9
Desværre nej, men tak for buddet
Avatar billede kim1a Ekspert
26. januar 2023 - 13:05 #10
Et trick kan være at opdele før og efter bindestregen - for det er den der driller kan jeg se.
Jeg kan dog ikke finde en "kode" for både bogstav og tal, hvor dælen mon jeg har fået x ind i hovedet fra.
Avatar billede birdbrain Seniormester
27. januar 2023 - 09:34 #11
Igen tak for buddet, men prøver lige at kaste det ud som er selvstændigt spørgsmål :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester