10. juli 2006 - 20:02Der 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.
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
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?
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
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
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.
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
Hej Bak - det var præcis det jeg søgte - tak for hjælpen :-)
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.