Avatar billede hubertus Seniormester
10. juli 2006 - 20:02 Der er 13 kommentarer og
1 løsning

søgerutine

Hejda
Jeg er kørt lidt fast i følgede søgerutine.

Private Sub cmdSøg_Click()
  Dim counter As Integer
  Dim var1, tmp  As String
   
  Worksheets("ark1").Activate
  Range("B3").Select
   
  var1 = frmsøg.txttrailer_reg.Text
       
  If txttrailer_reg.Text = "" Then
    MsgBox "Ugyldigt Reg. nr."
      txttrailer_reg.SetFocus
    Exit Sub
  End If
 
  counter = optælAntalRækker(2)

  For i = 3 To counter + 3
  Range("b" & i).Activate
  tmp = Range("b" & i)
  If var1 = tmp Then
    mlrowdisplayed = i
    ' MsgBox " hit " & i & "  række nr  " & myrow
    ActiveCell.Select

    Exit For
  End If
   
  Next

  read_data (mlrowdisplayed)
  savenew = 1
End Sub

Jeg har en userform, hvor jeg indtaster et reg. nr. hvorefter der søges efter et match i kolonne B. Men der kan være mere end et match i kolonne B. hvordan ændres rutinen, så jeg ved tryk på knappen søg fortsætter søgningen? Rutinen virker pt. på det første match, men et nyt tryk på søgeknappen for rutinen til at starte forfra igen. mao. jeg får hvergang det samme match, og ikke det næste match.

mvh./ Hubertus
Avatar billede brynil Nybegynder
10. juli 2006 - 20:08 #1
Fx. kan du gemme det fundne rækkenr. et ubenyttet sted i dit ark.
Avatar billede brynil Nybegynder
10. juli 2006 - 20:17 #2
Sæt celleværdien til din variabel myrow og brug den når du søger. Kod et standard start-sted hvis cellen er tom.

Nulstil cellen ved din textbox.change og evt. form.initialize event.
Avatar billede oyejo Nybegynder
10. juli 2006 - 21:59 #3
For i = 3 To counter + 3
  Range("b" & i).Activate
  tmp = Range("b" & i)
  If var1 = tmp Then
    mlrowdisplayed = i
    ' MsgBox " hit " & i & "  række nr  " & myrow
    ActiveCell.Select

    Exit For  ' Prøv å ta bort denne linje i din kode
  End If
Avatar billede oyejo Nybegynder
10. juli 2006 - 22:04 #4
Etter første treff går du ut av For next løkka med Exit for
Derfor tester den ikke på flere verdier


Ps!  her blir var1 av type variant og tmp blir av type string
Dim var1, tmp  As String
Avatar billede hubertus Seniormester
10. juli 2006 - 22:29 #5
Hej Oyejo
Jeg har afprøvet dit forslag. Det bevirker at rutinen finder det sidste match og ikke det første. Hvis jeg derimod gør linien med Msgboxen aktiv, så finder rutinen den første, hvorefter man kan gentage søgningen og finde næste match. Linien med Msgboxen skal ikke være aktiv. Jeg kan ikke finde logikken i det - kan du?

Brynil - jeg har selv været inde på noget lignende, men er kørt fast. Kan du konkretiser med noget vba kode?

Til hver match er der knyttet en dato, som befinder sig i kolonne f. Målet er at finde det match, hvor den nyeste dato optræder, hvorefter man bladre igennem de resterende. Kan det lade sige gøre?

mvh. / Hubertus
Avatar billede bak Forsker
10. juli 2006 - 23:40 #6
prøv den her

Dim FirstFlag As Boolean

Private Sub cmdSøg_Click()
    Dim counter As Integer
    Dim var1, tmp As String
    Dim rng As Range
    Worksheets("ark1").Activate

    var1 = frmSøg.txttrailer_reg.Text

    If txttrailer_reg.Text = "" Then
        MsgBox "Ugyldigt Reg. nr."
        txttrailer_reg.SetFocus
        Exit Sub
    End If
    counter = optælAntalRækker(2)
    Set rng = Range("B3:B" & counter + 3)
    If FirstFlag = False Then
        Range("B3").Activate
        rng.Find(What:=txttrailer_reg.Text, After:=ActiveCell, LookIn:=xlFormulas, _
                LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                MatchCase:=False, SearchFormat:=False).Activate
        FirstFlag = True
    Else
        rng.FindNext(After:=ActiveCell).Activate
    End If

    read_data (mlrowdisplayed)
    savenew = 1
End Sub
Avatar billede hubertus Seniormester
11. juli 2006 - 08:55 #7
Hej Bak
Jeg mangler i din rutine at få tildelt variablen mlrowdisplayed et rækkenummer. Det er nummeret for den række hvor jeg får det første match. Bruges til at skrive data ind i min userform. Hvor finder jeg rækkenummerert, når du bruger et array?
mvh. / Hubertus
Avatar billede hubertus Seniormester
11. juli 2006 - 11:25 #8
Bak - omtanke er en god ting - har fundet løsningen på rækkenummeret.

Nu står bare tilbage, at det match der skal vises først er den med det nyeste dato. Kan det bygges ind i rutinen?
mvh. /Hubertus
Avatar billede bak Forsker
12. juli 2006 - 01:21 #9
sorter på dato først (Faldende). Det kan du sagtens lave en makro der gøt
Avatar billede hubertus Seniormester
12. juli 2006 - 08:03 #10
Hej Bak
Datoen står jo i kolonne C, mens den kolonne som der laves match på er kolonne B. hvor i rutinen forestiller du dig søgningen skal foretages? Kan du hjælpe mig på vej med koden?

Hvilke muligheder har jeg for at lave en fejlhåndtering så brugeren blot får en besked om at matchet ikke findes.

mvh./Hubertus
Avatar billede hubertus Seniormester
19. juli 2006 - 18:37 #11
Hej bak din søgerutine virker fint, og det vil jeg gerne kvitere for med point. smidder du et svar?

Kan du give et bud på hvordan jeg håndter en søgning, hvor der ikke findes et match?

tak til oyejo for dine forsøg, men Bak var nærmest :-)
Avatar billede bak Forsker
20. juli 2006 - 01:21 #12
Dim FirstFlag As Boolean

Private Sub cmdSøg_Click()
    Dim counter As Integer
    Dim var1, tmp As String
    Dim rng As Range
    Worksheets("ark1").Activate

    var1 = frmSøg.txttrailer_reg.Text

    If txttrailer_reg.Text = "" Then
        MsgBox "Ugyldigt Reg. nr."
        txttrailer_reg.SetFocus
        Exit Sub
    End If
    counter = optælAntalRækker(2)
    Set rng = Range("B3:B" & counter + 3)
    On Error Goto NoMatch    '***************
    If FirstFlag = False Then
        Range("B3").Activate
        rng.Find(What:=txttrailer_reg.Text, After:=ActiveCell, LookIn:=xlFormulas, _
                LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                MatchCase:=False, SearchFormat:=False).Activate
        FirstFlag = True
    Else
        rng.FindNext(After:=ActiveCell).Activate
    End If

    read_data (mlrowdisplayed)
    savenew = 1
    Exit Sub

NoMatch:
    MsgBox "Der blev ikke fundet et match"
End Sub
Avatar billede bak Forsker
20. juli 2006 - 01:21 #13
svar :-)
Avatar billede hubertus Seniormester
20. juli 2006 - 07:29 #14
Hej Bak - det var præcis det jeg søgte - tak for hjælpen :-)
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
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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