07. august 2007 - 22:08Der 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
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
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
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?
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
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
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.