23. januar 2023 - 11:09Der 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
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.
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.
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
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
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
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.
Igen tak for buddet, men prøver lige at kaste det ud som er selvstændigt spørgsmål :-)
Synes godt om
Ny brugerNybegynder
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.