Avatar billede bveg Nybegynder
23. februar 2011 - 13:17 Der 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.
Avatar billede krat Nybegynder
23. februar 2011 - 13:47 #1
Har du overvejet funktionerne autofilter eller evt. avanceret filter. Det giver en stor fleksibilitetfor brugerne i udvælgelsen af poster.
Avatar billede bveg Nybegynder
23. februar 2011 - 13:59 #2
Ja det har jeg overvejet, men det er ikke løsningen for den brugergruppe jeg her med at gøre.
Avatar billede supertekst Ekspert
23. februar 2011 - 14:50 #3
Kan søgekriteriet være fra alle 15 kolonner - evt. kombination med flere kriterier - hidrørende fra flere koloner?
Avatar billede krat Nybegynder
23. februar 2011 - 22:34 #4
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.
Avatar billede bveg Nybegynder
24. februar 2011 - 08:36 #5
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.
Avatar billede supertekst Ekspert
24. februar 2011 - 09:03 #6
Kunne du vise den koden du har?
Avatar billede bveg Nybegynder
24. februar 2011 - 09:53 #7
Her er koden med det ene kriterie

Cells.Find(What:=InputBox("Søg på kundenr.", "Search"), _
    After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, _
    SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
    False).Activate
Avatar billede supertekst Ekspert
24. februar 2011 - 10:31 #8
Ok - er dette så udfordringen:

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.
Avatar billede supertekst Ekspert
24. februar 2011 - 13:42 #9
Supplerende spørgsmål - hvilke kolonner er søgekriterierne anført i?
Avatar billede bveg Nybegynder
24. februar 2011 - 15:21 #10
De er anført i kolonne B, C og G.
Avatar billede supertekst Ekspert
24. februar 2011 - 15:47 #11
Rem Version 1
Public Sub xSøg()
Dim søgeKriterie, sidsteRække As Long, xAdr As String, firstAdr As String
   
    søgeKriterie = InputBox("Indtast søgekriterie")
    sidsteRække = ActiveCell.SpecialCells(xlLastCell).row
    Range("B1").Select
   
    firstAdr = ""
    xAdr = 1
   
    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
Avatar billede bveg Nybegynder
25. februar 2011 - 08:16 #12
Perfekt tak. Lige hvad jeg har brug for. Drop mig et svar så jeg kan returnere med point.
Avatar billede supertekst Ekspert
25. februar 2011 - 08:46 #13
Selv tak - du får et svar..
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



Seneste spørgsmål Seneste aktivitet
I går 20:46 opkaldside Af hagbartm i Mobiltelefoner
I går 16:05 win 10 vil ikke boote Af bb69 i Windows
I går 11:20 Lenovo x390 Af tobberjas i PC
I går 10:14 Alder i Excel Af Nanarsi i Excel
I går 09:00 Flere linier på faneblad Af Peder Lund Nielsen i Excel