26. august 2003 - 22:11Der er
42 kommentarer og 1 løsning
Søg i Regneark vha VBA
Hej
Kort beskrevet har jeg en projektmappe indeholdende en del regneark. Projektmappen indeholder en række medicinske præparater der udskilles gennem leverens Enzymsystem kaldet Cytokrom P450 (og undergrupper).
Herefter kommer opgaven som jeg havde tænkt kunne udføres vha en Userform el. lign (som jeg dog ikke ved meget om): Når projektmappen åbnes skal Forsiden være omtalte userform og bl.a. indholde en søg/find-funktion der kan checke hvorvidt medicinen udskilles gennem leveren og herefter liste præparatet. Hvorledes gøres dette: Inputbox? Find?
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Her er en søgemakro Sæt den ind i et modul Ret selv forside navn (flere steder),og det område som den skal søge på
Den indsætter hyperlink på forsidearket I kolonne j
Sub FindOrd() Dim Fundet(100) As String I = 1 On Error GoTo Slut Søg = InputBox("Skriv søgestrengen på hvad der skal Findes", "Find medicinske præparater") For Each ws In Worksheets If ws.Name <> "Forside" Then ' skift selv navnet på forsiden Sheets(ws.Name).Select Columns("A:E").Select 'området den søger på ret det selv til Selection.Find(What:=Søg, After:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False).Activate A = ActiveCell.Row b = ActiveCell.Column Cells(A, b).Activate Fundet(I) = ws.Name & "!" & ActiveCell.Address If I > 1 Then For T = 1 To I - 1 If Fundet(I) = Fundet(T) Then I = I - 1 End If Next End If I = I + 1 Do Cells.FindNext(After:=ActiveCell).Activate A = ActiveCell.Row b = ActiveCell.Column Cells(A, b).Activate Fundet(I) = ws.Name & "!" & ActiveCell.Address If I > 1 Then For T = 1 To I - 1 If Fundet(I) = Fundet(T) Then GoTo Videre End If Next End If I = I + 1 Loop End If Videre: Next Slut: Sheets("Forside").Select Range("F2:F101").Select ' sletter alle data i området til hyperlink Selection.ClearContents Range("a2").Select For T = 1 To I - 1 Worksheets("forside").Range("F2:F101").Cells(T, 5).Select ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:=Fundet(T) ActiveCell.FormulaR1C1 = Fundet(T) ' skriver hyperlink på alle fundne steder Next End Sub
Det eneste jeg har rettet er for at få slettet den foregående søgning - på følgende måde:
Slut: Sheets("Forside").Select Range("J2:J101").Select ' sletter alle data i området til hyperlink Selection.ClearContents Range("a2").Select For T = 1 To I - 1 Worksheets("forside").Range("F2:F101").Cells(T, 5).Select ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:=Fundet(T) ActiveCell.FormulaR1C1 = Fundet(T) ' skriver hyperlink på alle fundne steder Next End Sub
Sub FindOrd() Dim Fundet(100) As String I = 1 On Error GoTo Slut Søg = InputBox("Skriv søgestrengen på hvad der skal Findes", "Find medicinske præparater") For Each ws In Worksheets If ws.Name <> "Forside" Then ' skift selv navnet på forsiden Sheets(ws.Name).Select Columns("A:E").Select 'området den søger på ret det selv til Selection.Find(What:=Søg, After:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False).Activate A = ActiveCell.Row b = ActiveCell.Column Cells(A, b).Activate Fundet(I) = ActiveCell.Value If I > 1 Then For T = 1 To I - 1 If Fundet(I) = Fundet(T) Then I = I - 1 End If Next End If I = I + 1 Do Cells.FindNext(After:=ActiveCell).Activate A = ActiveCell.Row b = ActiveCell.Column Cells(A, b).Activate Fundet(I) = ActiveCell.Value If I > 1 Then For T = 1 To I - 1 If Fundet(I) = Fundet(T) Then GoTo Videre End If Next End If I = I + 1 Loop End If Videre: Next Slut: Sheets("Forside").Select Range("F2:F101").Select ' sletter alle data i området til hyperlink Selection.ClearContents Range("a2").Select For T = 1 To I - 1 Worksheets("forside").Range("F2:F101").Cells(T, 1).Select ActiveCell = Fundet(T) Next End Sub
den skriver nu hvad der er i cellen, med det fundne ord i
Sub FindOrd() Dim Fundet(100) As String, Sted(100) As String i = 1 'On Error GoTo Slut Søg = InputBox("Skriv søgestrengen på hvad der skal Findes", "Find medicinske præparater") For Each ws In Worksheets If ws.Name <> "Forside" Then ' skift selv navnet på forsiden Sheets(ws.Name).Select Columns("A:H").Select 'området den søger på ret det selv til Selection.Find(What:=Søg, After:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False).Activate A = ActiveCell.Row b = ActiveCell.Column Cells(A, b).Activate Sted(i) = ws.Name & "!" & ActiveCell.Address Fundet(i) = ActiveCell.Value 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 A = ActiveCell.Row b = ActiveCell.Column Cells(A, b).Activate Sted(i) = ws.Name & "!" & ActiveCell.Address Fundet(i) = ActiveCell.Value 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 Videre: Next Slut: Sheets("Forside").Select Range("F2:G101").Select ' sletter alle data i området til hyperlink Selection.ClearContents Range("a2").Select For t = 1 To i - 1 Worksheets("forside").Range("F2:F101").Cells(t, 1).Select ActiveCell.Offset(0, 1) = Fundet(t) ActiveCell = Sted(t) Next End Sub
Jeg kunne ikke sende til dig ( blev afvist af serveren) så her er koden.
fejlen kom når den ikke fandt det søgte på en side.
du får alle oplysninger nu
Sub FindOrd() Dim Fundet(100, 5) As String, Sted(100) As String, Søg As Variant, I As Integer, T As Integer Dim R As Integer I = 1 On Error Resume Next Sheets("Forside").Select Range("B2:H201").Select ' sletter alle data i området til hyperlink Selection.ClearContents Range("a2").Select Søg = InputBox("Skriv søgestrengen på hvad der skal Findes", "Find medicinske præparater") Application.ScreenUpdating = False For Each ws In Worksheets If ws.Name <> "Forside" Then ' skift selv navnet på forsiden Sheets(ws.Name).Select Range("A1:H500").Select 'området den søger på ret det selv til Selection.Find(What:=Søg, After:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False).Activate If Error = 91 Then Err.Clear If I > 1 Then I = I - 1 GoTo Videre End If a = ActiveCell.Row If a = 1 Then GoTo Videre b = ActiveCell.Column Cells(a, b).Activate Sted(I) = ws.Name & "!" & ActiveCell.Address For T = 1 To 5 Fundet(I, T) = Sheets(ws.Name).Cells(a, T).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 Error = 91 Then Err.Clear If I > 1 Then I = I - 1 GoTo Videre End If a = ActiveCell.Row If a = 1 Then GoTo Videre b = ActiveCell.Column Cells(a, b).Activate Sted(I) = ws.Name & "!" & ActiveCell.Address For T = 1 To 5 Fundet(I, T) = Sheets(ws.Name).Cells(a, T).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 Videre: Next Slut: Sheets("Forside").Select Application.ScreenUpdating = True For T = 1 To I - 1 Worksheets("forside").Range("B2:F101").Cells(T, 1).Select For R = 1 To 5 ActiveCell.Offset(0, R) = Fundet(T, R) ActiveCell = Sted(T) Next Next If I = 1 Then MsgBox " ingen fundet" End If End Sub
Det ser rigtig godt ud det du der har lavet. Er det muligt OGSÅ at få en hyperlink til området hvor de findes?
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.