23. februar 2011 - 13:17Der er
12 kommentarer og 1 løsning
VBA kode til søgning via. dialog boks
Jeg har et excel ark på 46.000 rækker (15 kolonner). Hertil skal jeg bruge en boks hvor brugeren kan indtaste forskellige kriteriere og dermed få vist de rækker som indeholder søgekriterierne.
Disse kriterier kan f.eks. være - kunde nr. - del af navn (kolonnen består af for- og efernavn) - kontonr.
Jeg går ud fra det er en ret simpel søgning der normalt skal bruges når du afstår fra autofilter p.g.a. brugernes kompetencer.
Selvfølgelig kan man programmere sig gennem løsningen men overvej dette: Overordnet - styr brugernes adgang til hvad de kan se og redigere ved hjælp af brugerkontrol (beskyt ark og vis/skjul ark).
Lav løsningen det som en avanceret filtrering fordelt på 3 ark: liste (den skal brugerne slet ikke se) -kritterie (her skal der være skriveadgang til kritteriecellerne) og resultat (her skal der være læseadgang).
Indtastningen på kritteriearket kan flyttes over i den simple formular funktioen der findes i excel - så kan kritteriearket skjules, men der skal stadig være skiveadgang. En delstreng indtastes simpelt med * før og/eller efter teksten.
Indspil et par små makroer der åbner formular og kører filtreringen og og aktiver dem ved hjælp er par kommandoknapper.
Søgekriterierne kan kun være fra de tre kolonner, som jeg lister: - kunde nr. - del af navn (kolonnen består af for- og efternavn) - kontonr.
Jeg vil helst danne en dialog boks hvor brugeren kan skrive de data han kender for så at få vist de rækker der falder ind under denne søgning.
Mit problem er, at det selv kode jeg ikke kan få til at fungere. Det virker fint med et kriterie (find.cells (what...), men her kan jeg ikke få de sidste to med.
søg på kundenr partielt? eller søg på kontonr partielt? eller søg på navn partielt?
dette kunne i givet fald implementeres i en userform, hvor brugeren markerer hvilke kriterie, der skal søges efter (Option-box) og derefter indtaster kriterier i en Tekstbox.
De rækker, hvor kriteriet opfyldes vises så i en Listbox. Ved klik på en af disse - kan de øvrige data vises.
While xAdr <> "" xAdr = xSøgning(søgeKriterie, sidsteRække) If xAdr <> "" Then If firstAdr = "" Then firstAdr = xAdr Else If xAdr = firstAdr Then Exit Sub End If End If
Range(xAdr).Select MsgBox "fundet i addressen: " & xAdr maxAdr = xAdr End If Wend
End Sub Private Function xSøgning(søgeKriterie, sidsteRække) With ActiveSheet.Range("B1:C" & sidsteRække, "G1:G" & sidsteRække)
Set c = .Find(What:=søgeKriterie, _ After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, _ SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ False)
If Not c Is Nothing Then xSøgning = c.Address Exit Function Else xSøgning = "" End If End With End Function
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.