Anzeige
Archiv - Navigation
780to784
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
780to784
780to784
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Registername zuordnen - Suchbereich

Registername zuordnen - Suchbereich
13.07.2006 15:10:54
Helge
Hallo.
Ich habe eine Arbeitsmappe mit diversen Tabellenblättern (alle sind identisch aufgebaut) und ich möchte nun über einen Button eine Suchfunktion öffnen lassen.
Nach Eingabe meines Suchbegriffes sollen alle Tabellen durchsucht werden (hier möchte ich eine Einschränkung auf einen bestimmten Suchbereich haben A37-CF60 und A74-CF97) und alle Zeilen mit einem Treffer sollen komplett in ein bestimmtes Tabellenblatt kopiert werden. Dort aber erst beginnend ab Zeile 3 (davor sind Überschriften).
Wichtig dabei ist auch, dass eine "Wertkopie" erstellt wird, da viele Einträge in den Zellen aus einer Datenbank kommen. Die Formate (Farbe, Nachkommastellen etc.) sollen dabei ebenfalls übermommen werden. Wichtig ist zudem, dass zu jedem Zeilensatz in der Zieltabelle der Tabellenblattname aus dem die Zeile kommt geschrieben wird (dies soll in der Spalte CG passieren).
Hier mein bisheriger Code:

Sub Suche_Ausgabe_Trefferzeilen()
Dim wks As Worksheet
Dim rng As Range
Dim sAddress As String
'Suchbegriff
Dim sFind As Variant
Dim cr As Long, tarWks As String
tarWks = "Zieltabelle" 'Namen der Zieltabelle anpassen
cr = 65536
If Worksheets(tarWks).Cells(cr, 1) = "" Then
cr = Worksheets(tarWks).Cells(cr, 1).End(xlUp).Row
End If
If cr < 3 Then cr = 3 'Den ersten beiden Zeilen ausweichen wg. Überschrift
'If cr = 0 Then cr = 1
'Suchbegriff definieren
sFind = InputBox("Bitte den gewünschten Suchbegriff eingeben:")
If sFind = "" Then Exit Sub
'Suchbegriff auf Zelle definieren
'sFind = Worksheets("Tabelle1").Range("A1")
For Each wks In Worksheets
'If wks.Name = tarWks Then Exit Sub
If wks.Name <> tarWks Then
Set rng = wks.Cells.Find(What:=sFind, _
lookat:=xlPart, LookIn:=xlValues)
If Not rng Is Nothing Then
sAddress = rng.Address
Do
Application.GoTo rng, True
'Für die Automation kann die "If"-Anweisung auskommentiert werden
'If MsgBox("Suchbegriff: " & sFind & ",gefunden in " _
& wks.Name & ", " & rng.Address, vbYesNo + vbQuestion, "Weitersuchen ?") = vbNo Then Exit Sub
wks.Rows(rng.Row).Copy Destination:=Worksheets(tarWks).Rows(cr)
cr = cr + 1
Set rng = wks.Cells.FindNext(after:=ActiveCell)
If rng.Address = sAddress Then Exit Do
Loop
End If
NextStart:
End If
Next wks
MsgBox prompt:="Die Suche ist beendet!"
End Sub

Im Grunde bin ich mit dem Ergebnis zufrieden. Nun brauche ich noch folgende Dinge:
1.) In der Zieltabelle sollte in Spalte CG jeweils der Name des Tabellenblattes stehen, damit ich es später zuordnen kann (GANZ WICHTIG)
2.) Die Suche soll auf Bereiche eingeschränkt werden (bei allen Tabellenblättern gleich):
A37-CF60 und A74-CF97
3.) Die Datensätze sollen als "Wertkopie" in der Zieltabelle stehen (sonst gehen mir die Bezüge flöten)
Für diese Punkte brauche ich nun noch eure Hilfe... Danke!

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Registername zuordnen - Suchbereich
13.07.2006 21:42:12
firmus
Hallo Helge,
hier mal ein Beispiel "hingerotzt" - sorry habe im Moment wenig Lust.
Es zieht in einer xls-file alle Blattnamen und schreibt sie in ein
neu erstelltes Blatt am Anfang (Inhaltsverzeichnis).
Damit erhälst Du die Registernamen.
Range.Select dynamisch ist vielleicht beim Suchen noch hilfreich.
Aber dazu gibt es sicher noch bessere Beispiele/Lösungen.
Gruss,
Firmus

Sub CounterverzeichnisErstellen()
' Macro1 Macro
' Macro recorded 16.02.2004 by niefi01
Dim i, maxzeil, maxspalt As Integer
ActiveWorkbook.Sheets.Add Before:=Worksheets(1)  'create + überschriften
ActiveSheet.Name = "counter"
Range("A1").Value = "Inhaltsverzeichnis"
Range("c1").Value = "maxzeilen"
Range("d1").Value = "maxspalten"
Range("e1").Value = "Überschriftzeilen"
ActiveCell.Offset(2, 0).Select
For i = 2 To ActiveWorkbook.Sheets.Count         'name + maxzeil + maxspalt setzen
Sheets(i).Activate
Range("a1:ax1").Select
Selection.Copy
maxzeil = ActiveSheet.UsedRange.Rows.Count
maxspalt = ActiveSheet.UsedRange.Columns.Count
Sheets("counter").Select
ActiveCell.Value = i - 1
ActiveCell.Offset(0, 1).Value = Sheets(i).Name
ActiveCell.Offset(0, 2).Value = maxzeil
ActiveCell.Offset(0, 3).Value = maxspalt
ActiveCell.Offset(1, 0).Select
Debug.Print i;
Next i
For i = 2 To ActiveWorkbook.Sheets.Count         'Headerline kopieren
Sheets(i).Activate
Range("a1:ax1").Select
Selection.Copy
Sheets("counter").Select
Range("E" + Trim(Str(i + 1))).Select
ActiveSheet.Paste
Debug.Print i;
Next i
Range("B4").Activate
Do Until ActiveCell.Value = ""
ActiveSheet.Hyperlinks.Add Anchor:=ActiveCell, Address:="", SubAddress:= _
ActiveCell.Value & "!A1", TextToDisplay:=ActiveCell.Value
ActiveCell.Offset(1, 0).Select
Loop
End Sub

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige