Avatar billede krasmulu Nybegynder
07. august 2007 - 22:08 Der er 13 kommentarer og
1 løsning

Problemer med visning af data fra søgning (VB)

Hej

Jeg har lavet en prøvet at arbejde videre med og tilpasse en søgefunktion i excel, som jeg har fundet herinde.

Jeg har imidlertid to problemer. Det ene er, at jeg ikke kan vist de data der kommer retur på den rigtige måde, da jeg vil have resultaterne fra de forskellige ark til at være hvert deres sted. Derudover er der gået noget galt med sorteringen af resultatet og så er dataene jo lige pludselig ikke valide længere. Håber I kan hjælpe

-----Start-----
Dim Fundet(300, 20) As String, Sted(300) As String, Søg As Variant, I As Integer, T As Integer
Dim R As Integer, Side(300) As String
I = 1
On Error Resume Next
Range("D1").Select
  Sheets("Forside").AutoFilterMode = False
  Sheets("Forside").Select
  Range("C27:v301").Select            ' sletter alle data i området til hyperlink
    Selection.ClearContents
    Range("c27").Select
    Søg = InputBox("Skriv søgestrengen på hvad der skal Findes")
Application.ScreenUpdating = False
    For Each ws In Worksheets

If ws.Name = "Ark 1" Then 'navnet på det ark der skal hentes data fra
      Sheets(ws.Name).Select
      Range("A1:A500").Select 'området den søger på
      Selection.Find(What:=Søg, After:=ActiveCell, LookIn:=xlValues, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False).Activate
        If Err.Number = 91 Then
          Err.Clear
        GoTo Videre
        End If
        a = ActiveCell.Row
        If a = 1 Then GoTo Videre
        b = ActiveCell.Column
        Cells(a, b).Activate
        Side(I) = ws.Name
        Sted(I) = "'" & ws.Name & "'!" & ActiveCell.Address
        For T = 1 To 14
        Fundet(I, T) = Sheets(ws.Name).Cells(a, T).Offset(0, 0).Value
        Next
          If I > 1 Then
        For T = 1 To I - 1
          If Sted(I) = Sted(T) Then
          GoTo Videre
        End If
        Next
      End If
      I = I + 1
    Do
      Cells.FindNext(After:=ActiveCell).Activate
        If Err.Number = 91 Then
        Err.Clear
        GoTo Videre
        End If
        a = ActiveCell.Row
          If a = 1 Then GoTo Videre
        b = ActiveCell.Column
        Cells(a, b).Activate
        Side(I) = ws.Name
        Sted(I) = "'" & ws.Name & "'!" & ActiveCell.Address
        For T = 1 To 14
        Fundet(I, T) = Sheets(ws.Name).Cells(a, T).Offset(0, 0).Value
        Next
      If I > 1 Then
        For T = 1 To I - 1
        If Sted(I) = Sted(T) Then
                GoTo Videre
          End If
        Next
      End If
     
      I = I + 1
  Loop
End If



If ws.Name = "Ark 1" Then 'navnet på det ark der skal hentes data fra
      Sheets(ws.Name).Select
      Range("A1:A500").Select 'området den søger på
      Selection.Find(What:=Søg, After:=ActiveCell, LookIn:=xlValues, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False).Activate
        If Err.Number = 91 Then
          Err.Clear
        GoTo Videre
        End If
        a = ActiveCell.Row
        If a = 1 Then GoTo Videre
        b = ActiveCell.Column
        Cells(a, b).Activate
        Side(I) = ws.Name
        Sted(I) = "'" & ws.Name & "'!" & ActiveCell.Address
        For T = 1 To 14
        Fundet(I, T) = Sheets(ws.Name).Cells(a, T).Offset(0, 0).Value
        Next
          If I > 1 Then
        For T = 1 To I - 1
          If Sted(I) = Sted(T) Then
          GoTo Videre
        End If
        Next
      End If
      I = I + 1
    Do
      Cells.FindNext(After:=ActiveCell).Activate
        If Err.Number = 91 Then
        Err.Clear
        GoTo Videre
        End If
        a = ActiveCell.Row
          If a = 1 Then GoTo Videre
        b = ActiveCell.Column
        Cells(a, b).Activate
        Side(I) = ws.Name
        Sted(I) = "'" & ws.Name & "'!" & ActiveCell.Address
        For T = 1 To 14
        Fundet(I, T) = Sheets(ws.Name).Cells(a, T).Offset(0, 0).Value
        Next
      If I > 1 Then
        For T = 1 To I - 1
        If Sted(I) = Sted(T) Then
                GoTo Videre
          End If
        Next
      End If
     
      I = I + 1
  Loop
End If

------slutning/præsentation af data------------

Videre:
Next
Slut:
  Sheets("Forside").Select
  Application.ScreenUpdating = True
  For T = 1 To I - 1
    Worksheets("forside").Range("C27:N101").Cells(T, 1).Select
    For R = 1 To 15
      ActiveCell.Offset(0, R) = Fundet(T, R)
    Next
      ActiveCell.Select
        ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:=Sted(T)
        ActiveCell.FormulaR1C1 = Side(T) ' skriver hyperlink på alle fundne steder
      Next
    Range("C27").Select
      Selection.Sort Key1:=Range("C27"), Order1:=xlAscending, Key2:=Range("C27") _
        , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
        False, Orientation:=xlTopToBottom
          Range("C2").Select

    If I = 1 Then
      MsgBox " ingen fundet"
      End If
    Range("D1").Select
    Selection.AutoFilter
   
   
End Sub


----------Jeg prøvede først at lave en "videre2" hvor data blev outputtet et andet sted, som jeg så henviste til i det opslag der foretages som nummer to. Det resulterede så bare i, at det hele kom det sted jeg skrev i videre2

På forhånd tak
Avatar billede gider_ikke_mere Nybegynder
08. august 2007 - 09:45 #1
Kan du bruge denne?

Sub test2()
Dim Søg, W, Resultat(), Område, I As Long, Y As Long, Streng As Variant, Sp
Sheets("Forside").Range("C27:v301").ClearContents
Søg = InputBox("Skriv søgestrengen på hvad der skal Findes", "Søg efter..")
W = 1
ReDim Resultat(0)
Område = Sheets("Ark 1").Range("A1:P500")

For I = 1 To UBound(Område)
    Streng = ""
    If Område(I, 1) = Søg Then
        Streng = "'Ark 1'!$A$" & I & "|"
        For Y = 1 To 15
            Streng = Streng & (Område(I, Y)) & "|"
        Next
        ReDim Preserve Resultat(W)
        Resultat(W) = Streng
    W = W + 1
    End If
Next

Sheets("Forside").Select
For I = 1 To UBound(Resultat)
    Sp = Split(Resultat(I), "|")
    Range("C26").Offset(I).Range("A1:P1") = Sp
    Range("C26").Offset(I).Range("A1").Select
    ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
    Sp(0), TextToDisplay:=Sp(0)
Next
End Sub
Avatar billede gider_ikke_mere Nybegynder
08. august 2007 - 09:55 #2
Hvis søgningen blot skal være indeholdt i cellen:

Sub test3()
Dim Søg, W, Resultat(), Område, I As Long, D As Long, Y As Long, Streng As Variant, Sp
Sheets("Forside").Range("C27:v301").ClearContents
Søg = InputBox("Skriv søgestrengen på hvad der skal Findes", "Søg efter..")
W = 1
ReDim Resultat(0)
Område = Sheets("Ark 1").Range("A1:P500")

For I = 1 To UBound(Område)
    Streng = ""
    For D = 1 To Len(Område(I, 1))
        If Mid(Område(I, 1), D, Len(Søg)) = Søg Then
            Streng = "'Ark 1'!$A$" & I & "|"
            For Y = 1 To 15
                Streng = Streng & (Område(I, Y)) & "|"
            Next
            ReDim Preserve Resultat(W)
            Resultat(W) = Streng
            W = W + 1
            Exit For
        End If
    Next
Next

Sheets("Forside").Select
For I = 1 To UBound(Resultat)
    Sp = Split(Resultat(I), "|")
    Range("C26").Offset(I).Range("A1:P1") = Sp
    Range("C26").Offset(I).Range("A1").Select
    ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
    Sp(0), TextToDisplay:=Sp(0)
Next
End Sub
Avatar billede krasmulu Nybegynder
08. august 2007 - 17:31 #3
Nu har jeg testet det du har skrevet. Den outputter ikke noget resultat i arket, men de kommer heller ikke med nogen fejlmeddelelser...

Og hvordan genbruger jeg dele af koden til at søge i andre ark med output et andet sted samtidigt?
Avatar billede gider_ikke_mere Nybegynder
08. august 2007 - 18:19 #4
Koden søger i arket "ark 1" A1:A500 efter hvad du har skrevet i søgefeltet. Putter data i arket "forside" fra C26 og ned. Det var sådan jeg tolkede det skulle fungere.

Skal koden søge i flere ark? Og putte resultat i flere ark?
Avatar billede gider_ikke_mere Nybegynder
08. august 2007 - 18:26 #5
Send evt. et ark til gt4(snabela)racingcar(punkt)dk.
Avatar billede gider_ikke_mere Nybegynder
09. august 2007 - 07:33 #6
Fejlen var at du her på siden havde angivet søgesiden til at hedde
"Ark 1" og i dit ark du mailede kaldte du den
"Ark1".

Jeg laver den om så den søger i alle ark.
Avatar billede gider_ikke_mere Nybegynder
09. august 2007 - 07:35 #7
Skal resultaterne bare ligge under hinanden, eller bestemte steder i arket Forside?
Avatar billede gider_ikke_mere Nybegynder
09. august 2007 - 08:39 #8
Så blev koden således:

Sub test3()
Dim Søg, W, Resultat(), Område, I As Long, D As Long, Y As Long, Streng As Variant, Sp

Søg = InputBox("Skriv søgestrengen på hvad der skal Findes", "Søg efter..")
If Søg = "" Then
    MsgBox "Du skal skrive en værdi at søge efter!"
    Exit Sub
End If

Application.Goto reference:=("Ark1Resultat")
Selection.ClearContents
Application.Goto reference:=("Ark2Resultat")
Selection.ClearContents
Application.Goto reference:=("Ark3Resultat")
Selection.ClearContents

For Each ws In Worksheets
    If ws.Name <> "Forside" Then
        W = 1
        ReDim Resultat(0)

        Område = Sheets(ws.Name).Range("A1:P500")
        For I = 1 To UBound(Område)
            Streng = ""
            For D = 1 To Len(Område(I, 1))
                If Mid(Område(I, 1), D, Len(Søg)) = Søg Then
                    Streng = "'" & ws.Name & "'!$A$" & I & "|"
                    For Y = 1 To 15
                        Streng = Streng & (Område(I, Y)) & "|"
                    Next
                    ReDim Preserve Resultat(W)
                    Resultat(W) = Streng
                    W = W + 1
                    Exit For
                End If
            Next
        Next

        Sheets("Forside").Select
        On Error Resume Next
        Application.Goto reference:=(ws.Name)
        If Err.Number = 1004 Then
            MsgBox "Referencen " & ws.Name & " blev ikke fundet!"
            GoTo næste
        End If
        For I = 1 To UBound(Resultat)
            ActiveCell.Range("A2").Select
            Sp = Split(Resultat(I), "|")
            ActiveCell.Range("A1:P1") = Sp
            ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
            Sp(0), TextToDisplay:=Sp(0)
        Next
    End If
næste:
Next
End Sub
Avatar billede krasmulu Nybegynder
09. august 2007 - 08:59 #9
Det er super! Hvis jeg vil fjerne link'sne, hvor meget skal jeg så fjerne?

Og så må du gerne smide et svar ;)
Avatar billede gider_ikke_mere Nybegynder
09. august 2007 - 09:07 #10
De bliver fjernet ved næste søgning.
Avatar billede gider_ikke_mere Nybegynder
09. august 2007 - 09:08 #11
Bemærk at hvis du tilføjer et nyt ark, skal der laves 2 nye navnereferencer i arket.
Avatar billede gider_ikke_mere Nybegynder
15. august 2007 - 17:56 #12
Skal vi lukke?
Avatar billede krasmulu Nybegynder
19. august 2007 - 13:18 #13
Beklager den sene respons. Det virker helt som det skal

Tak for hjælpen :)
Avatar billede gider_ikke_mere Nybegynder
19. august 2007 - 20:01 #14
Velbekomme :-)
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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