Excel und VBA - neues Arbeitsblatt nach Suchvorgang
Geizhals » Forum » Programmierung » Excel und VBA - neues Arbeitsblatt nach Suchvorgang (12 Beiträge, 180 Mal gelesen) Top-100 | Fresh-100
Du bist nicht angemeldet. [ Login/Registrieren ]
.
Re: Excel und VBA - neues Arbeitsblatt nach Suchvorgang
13.05.2007, 14:15:15
Sub x()
Dim wks As Worksheet
Dim strSearch As String, strFirst As String
Dim arrLocations()
Dim rngFound As Excel.Range
Dim intCounter

Do While Trim(strSearch) = ""
    strSearch = InputBox("Bitte Suchbegriff eingeben:")
Loop
strSearch = Trim(LCase(strSearch))
ReDim arrLocations(0 To 2, 0 To 0)
For Each wks In ActiveWorkbook.Worksheets
    Set rngFound = wks.Cells.Find(strSearch, LookIn:=xlValues)
    If Not rngFound Is Nothing Then
        strFirst = rngFound.Address
        Do
            intCounter = UBound(arrLocations, 2) + 1
            ReDim Preserve arrLocations(2, intCounter)
            arrLocations(0, intCounter) = wks.Name
            arrLocations(1, intCounter) = rngFound.Address
            arrLocations(2, intCounter) = rngFound.Text
            Set rngFound = wks.Cells.FindNext(rngFound)
        Loop While Not rngFound Is Nothing And rngFound.Address <> strFirst
    End If
Next wks
Worksheets.Add after:=Worksheets(Worksheets.Count)
Set wks = Worksheets(Worksheets.Count)
For intCounter = 1 To UBound(arrLocations, 2)
    wks.Cells(intCounter + 1, 1) = arrLocations(0, intCounter)
    wks.Cells(intCounter + 1, 2) = arrLocations(1, intCounter)
    wks.Cells(intCounter + 1, 3) = arrLocations(2, intCounter)
    wks.Hyperlinks.Add anchor:=Range("d" & intCounter + 1), Address:="", SubAddress:=arrLocations(0, intCounter) & "!" & arrLocations(1, intCounter), TextToDisplay:="...Goto"
Next
wks.Cells(1, 1) = "Tabelle"
wks.Cells(1, 2) = "Zelle"
wks.Cells(1, 3) = "Zellinhalt"
wks.Cells(1, 4) = "Link"
wks.name="Fundorte"
End Sub

vor dem schließen löscht du dann das blatt:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Worksheets("Fundorte").Delete
End Sub


mfg

Penguin
13.05.2007, 14:16 Uhr - Editiert von Penguin, alte Version: hier
Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
....
Re(4): Excel und VBA - neues Arbeitsblatt nach Suchvorgang
18.05.2007, 14:45:34
zuerst, wenn du mir eine frage stellst, solltest du auch mir antworten - wie soll ich sonst die frage sehen? ;-)

Nach zig Edits, jetzt wird die Farbe auch vorher korrigiert.

zur Frage:
Sub x()
Dim wks As Worksheet
Dim strSearch As String, strFirst As String
Dim arrLocations()
Dim rngFound As Excel.Range
Dim intCounter

For Each wks In ActiveWorkbook.Worksheets
    If LCase(Trim(wks.Name)) = "fundorte" Then
        Application.DisplayAlerts = False
        wks.Delete
        Application.DisplayAlerts = True
        Exit For
    End If
Next wks

Do While Trim(strSearch) = ""
    strSearch = InputBox("Bitte Suchbegriff eingeben:")
Loop
strSearch = Trim(LCase(strSearch))
ReDim arrLocations(0 To 2, 0 To 0)
For Each wks In ActiveWorkbook.Worksheets
    Set rngFound = wks.Cells.Find(strSearch, LookIn:=xlValues)
    If Not rngFound Is Nothing Then
        strFirst = rngFound.Address
        Do
            intCounter = UBound(arrLocations, 2) + 1
            ReDim Preserve arrLocations(2, intCounter)
            arrLocations(0, intCounter) = wks.Name
            arrLocations(1, intCounter) = rngFound.Address
            arrLocations(2, intCounter) = rngFound.Text
            rngFound.Font.ColorIndex = 1
            rngFound.Characters(Start:=InStr(1, rngFound.Text, strSearch), Length:=Len(strSearch)).Font.ColorIndex = 5
            Set rngFound = wks.Cells.FindNext(rngFound)
        Loop While Not rngFound Is Nothing And rngFound.Address <> strFirst
    End If
Next wks

Worksheets.Add after:=Worksheets(Worksheets.Count)
Set wks = Worksheets(Worksheets.Count)
For intCounter = 1 To UBound(arrLocations, 2)
    wks.Cells(intCounter + 1, 1) = arrLocations(0, intCounter)
    wks.Cells(intCounter + 1, 2) = arrLocations(1, intCounter)
    wks.Cells(intCounter + 1, 3) = Left(arrLocations(2, intCounter), InStr(1, arrLocations(2, intCounter), strSearch) - 1) & UCase(strSearch) & Right(arrLocations(2, intCounter), 1 + Len(arrLocations(2, intCounter)) - InStr(1, arrLocations(2, intCounter), strSearch) - Len(strSearch))
    wks.Cells(intCounter + 1, 3).Characters(Start:=InStr(1, arrLocations(2, intCounter), strSearch), Length:=Len(strSearch)).Font.ColorIndex = 5
    wks.Hyperlinks.Add anchor:=Range("d" & intCounter + 1), Address:="", SubAddress:=arrLocations(0, intCounter) & "!" & arrLocations(1, intCounter), TextToDisplay:="...Goto"
Next
wks.Cells(1, 1) = "Tabelle"
wks.Cells(1, 2) = "Zelle"
wks.Cells(1, 3) = "Zellinhalt"
wks.Cells(1, 4) = "Link"
wks.Name = "Fundorte"
End Sub

Bei color index kannst die Farbe ändern, im Moment ists blau.

mfg

Penguin
19.05.2007, 16:23 Uhr - Editiert von Penguin, alte Version: hier
Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
 

Dieses Forum ist eine frei zugängliche Diskussionsplattform.
Der Betreiber übernimmt keine Verantwortung für den Inhalt der Beiträge und behält sich das Recht vor, Beiträge mit rechtswidrigem oder anstößigem Inhalt zu löschen.
Datenschutzerklärung