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

Zeilennummer auslesen - ev. Link

Zeilennummer auslesen - ev. Link
14.07.2006 22:49:18
Mathias
N'Abend Leute!
Wenn ich über eine Arbeitsmappe mit diversen Tabellen bestimmte Einträge suchen lasse und mir die Treffer in einem Tabellenblatt dieser Mappe aufgelistet werden (dabei wird die ganze Zeile kopiert), möchte ich am Ende des Eintrages in der folgenden Spalte gerne die Nummer der Zeile, wo sich der Treffer in seiner Ursprungstabelle befindet.
Wenn möglich könnte man natürlich ggf. auch noch den Tabellennamen auslesen lassen (dies kann ich notfalls aber auch anders lösen). Oder kann man vielleicht sogar automatisch einen Link erzeugen lassen, der auf den Treffer verweist?
Danke für eure Hilfe.
Mathias

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilennummer auslesen - ev. Link
14.07.2006 22:59:38
Josef
Hallo Matthias!
Poste den Code, dann bau' ich dir das ein!
Aber noch eine Frage dazu. Wenn du die gesamte Zeile kopierst, wo soll dann der Hyperlink hin?
Gruß Sepp

AW: Zeilennummer auslesen - ev. Link
14.07.2006 23:00:13
Bugs
Hallo, folgenden Code in ein Modul:
Option Base 1
Option Compare Text

Sub Suchen_und_anzeigen()
Dim Meldung         As Byte, Pos        As Byte
Dim Schleife        As Byte, y          As Byte
Dim Begriff, Suchen()                   As Variant
Dim Bereich                             As Range
Dim n%, x%, xZelle%, yZelle%
Dim xTabelle$(), Adresse$(), Text$
' Suchbegriff eingeben
Begriff = InputBox _
("Suchwort eingeben." & vbCrLf & _
"Willst Du Abbrechen,einfach Enter drücken", "S U C H M O D U S")
If Begriff = "" Then Exit Sub
Pos = InStr(Begriff, "+")
If Pos Then
ReDim Suchen(2)
Suchen(1) = Left(Begriff, Pos - 1)
Suchen(2) = Right(Begriff, Len(Begriff) - Pos)
Schleife = 2
Else
ReDim Suchen(1)
Suchen(1) = Begriff
Schleife = 1
End If
Application.ScreenUpdating = False
' Eigentlicher Suchvorgang (in allen Tabellenblättern)
x = 1
For y = 1 To Schleife
For n = 1 To Sheets.Count
If Sheets(n).Name <> "Auswahltabelle" Then
' Letzte Zelle des Bereiches ermitteln. Diese Zelle wird als Startzelle für
' die Suche deffiniert, da Suche nach dieser Zelle, also in erster Zelle
' des Bereiches beginnt.
'Bereich festlegen
Set Bereich = Worksheets(n).UsedRange
With Worksheets(n).Range(Bereich.Address)
xZelle = .Columns(.Columns.Count).Column
yZelle = .Rows(.Rows.Count).Row
End With
With Sheets(n).Range(Bereich.Address)
Set c = .Find(Suchen(y), After:=Cells(yZelle, xZelle), LookIn:=xlValues)
If Not c Is Nothing Then
ErsteAdresse = c.Address
Do
ReDim Preserve Adresse(x): ReDim Preserve xTabelle(x)
xTabelle(x) = Sheets(n).Name
Adresse(x) = c.Address(RowAbsolute:=False, ColumnAbsolute:=False)
Set c = .FindNext(c)
x = x + 1
Loop While Not c Is Nothing And c.Address <> ErsteAdresse
End If
End With
End If
Next n
Next y
Application.ScreenUpdating = True
' Die Anzahl der gefundenen Werte ist (x - 1), wenn keiner
' gefunden wurde dann ist x = 1
Select Case x
Case 1
Meldung = MsgBox("Es wurde leider Nix gefunden", _
vbOKOnly, "G E F U N D E N E   W E R T E")
Exit Sub
Case Else
Meldung = MsgBox("Hurra " & (x - 1) & " Übereinstimmungen gefunden.", _
vbOKOnly, "G E F U N D E N E   W E R T E")
'Tabelle einfügen
'ALTER CODE: Worksheets.Add.Move after:=Worksheets(Worksheets.Count)
On Error Resume Next
With ActiveSheet
.Name = "Startseite"
.[A1] = "Suchergebnis"
For n = 1 To x - 1
.Cells(n + 1, 1) = xTabelle(n)
.Cells(n + 1, 2) = Adresse(n)
Next n
End With
End Select
End Sub

Rückmeldung wäre nett !!! 


>>> mfg Bugs <<<

Sicher ist, dass nichts sicher ist. Selbst das nicht.

Anzeige
AW: Zeilennummer auslesen - ev. Link
14.07.2006 23:30:57
Mathias
Hallo Sepp, also Bugs.
@Sepp. Hier mal der Code, den ich zusammengeklaut und meinen Bedürfnissen angepasst habe. Die grundsätzliche Idee aus dem Beispiel von Bugs ist genial. Nur brauche ich als Treffer die gesamte Zeile (ggf. erläutern sich daraus Zusammenhänge) und dahinter hätte ich dann gerne die Anzeige des Namens und der Zelle (so wie bei Bugs). Das wäre super.

Private Sub CommandButton1_Click()
Dim wks As Worksheet
Dim rng As Range
Dim sAddress As String
Dim sFind As Variant
Dim cr As Long, tarWks As String
tarWks = "Ergebnisse"
cr = 65536
If Worksheets(tarWks).Cells(cr, 1) = "" Then
cr = Worksheets(tarWks).Cells(cr, 1).End(xlUp).Row
End If
If cr < 2 Then cr = 2
sFind = InputBox("Suchbegriff")
If sFind = "" Then Exit Sub
For Each wks In Worksheets
If wks.Name <> tarWks Then
Set rng = wks.Range("A1:A10").Find(What:=sFind, _
lookat:=xlPart, LookIn:=xlValues)
If Not rng Is Nothing Then
sAddress = rng.Address
Do
Application.GoTo rng, True
wks.Rows(rng.Row).Copy Destination:=Worksheets(tarWks).Rows(cr)
cr = cr + 1
Set rng = wks.Range("A1:A10").FindNext(After:=ActiveCell)
If rng.Address = sAddress Then Exit Do
Loop
End If
NextStart:
End If
Next wks
MsgBox prompt:="Suche beendet!"
End Sub

Anzeige
AW: Zeilennummer auslesen - ev. Link
14.07.2006 23:55:46
Josef
Hallo Matthias!
Eine Möglichkeit.
Private Sub CommandButton1_Click()
Dim objSh As Worksheet, objTar As Worksheet
Dim rng As Range
Dim strFirst As String
Dim strFind As Variant
Dim lngRow As Long

On Error GoTo ErrExit

With Application
  .ScreenUpdating = False
  .EnableEvents = False
  .DisplayAlerts = False
  .Calculation = xlCalculationManual
  .Cursor = xlWait
End With

strFind = InputBox("Suchbegriff")
If strFind = "" Then GoTo ErrExit

Set objTar = Sheets("Ergebnisse")

lngRow = objTar.Cells(Rows.Count, 1).End(xlUp).Row

For Each objSh In Worksheets
  If Not objSh Is objTar Then
    strFirst = vbNullString
    Set rng = objSh.Range("A1:A10").Find(What:=strFind, _
      lookat:=xlPart, LookIn:=xlValues)
    If Not rng Is Nothing Then
      strFirst = rng.Address
      Do
        lngRow = lngRow + 1
        If lngRow > Rows.Count Then
          MsgBox "Voll!"
          Exit Sub
        End If
        With objTar
          objSh.Rows(rng.Row).Copy .Rows(lngRow)
          .Hyperlinks.Add _
            Anchor:=.Cells(lngRow, .Cells(lngRow, Columns.Count).End(xlToLeft).Column + 1), _
            Address:="", _
            SubAddress:="'" & objSh.Name & "'!" & rng.Address, _
            TextToDisplay:=objSh.Name & ", " & rng.Address(0, 0)
        End With
        Set rng = objSh.Range("A1:A10").FindNext(rng)
      Loop While Not rng Is Nothing And strFirst <> rng.Address
    End If
  End If
Next

MsgBox "Suche beendet!"

ErrExit:

Set objTar = Nothing
Set rng = Nothing

If Err.Number > 0 Then
  MsgBox Err.Number & vbLf & Err.Description, , "Fehler"
  Err.Clear
End If

With Application
  .ScreenUpdating = True
  .EnableEvents = True
  .DisplayAlerts = True
  .Calculation = xlCalculationAutomatic
  .Cursor = xlDefault
End With

End Sub


Gruß Sepp

Anzeige
Das ist es schon fast
15.07.2006 00:13:03
Mathias
Das sieht ja sehr gut aus. Aber irgendwie wird mir nur der erste Treffer angezeigt. Es sollen aber ja alle Treffer aufgelistet werden (ab zeile 2 abwärts). Das mit dem dem Link ist super genial! Das Makro meckert auch das es ein Problem mit dem Range Befehl gibt...
AW: Das ist es schon fast
15.07.2006 00:18:40
Josef
Hallo Matthias!
Sind die kopierten Zeilen etwa bis zur letzten Spalte gefüllt?
Gruß Sepp

AW: Das ist es schon fast
15.07.2006 00:26:35
Mathias
Was ist bei dir jetzt die letzte Spalte? Die Zeilendatensätze sind jeweils bis zur Spalte AE beschrieben. Relevant sind aber nur die ersten 5 Spalten - habe den Suchbereich deswegen erweitert. Das klappt auch. Aber die Suche hört nach dem ersten Treffer auf. Er findet z.B. in Zeile 40 etwas und führt dann alles wie gewünscht aus. Nur folgende Treffer aus z.B. Zeile 50 und dem nächsten Blatt Zeile 100 listet er nicht.
Anzeige
AW: Das ist es schon fast
15.07.2006 00:33:34
Josef
Hallo Matthias!
Also bei mir läuft es ohne Probleme!
Private Sub CommandButton1_Click()
Dim objSh As Worksheet, objTar As Worksheet
Dim rng As Range
Dim strFirst As String
Dim strFind As Variant
Dim lngRow As Long

On Error GoTo ErrExit

With Application
  .ScreenUpdating = False
  .EnableEvents = False
  .DisplayAlerts = False
  .Calculation = xlCalculationManual
  .Cursor = xlWait
End With

strFind = InputBox("Suchbegriff")
If strFind = "" Then GoTo ErrExit

Set objTar = Sheets("Ergebnisse")

lngRow = objTar.Cells(Rows.Count, 1).End(xlUp).Row

For Each objSh In Worksheets
  If Not objSh Is objTar Then
    strFirst = vbNullString
    Set rng = objSh.Range("A:E").Find(What:=strFind, _
      lookat:=xlPart, LookIn:=xlValues, after:=objSh.Range("E65536"))
    If Not rng Is Nothing Then
      strFirst = rng.Address
      Do
        lngRow = lngRow + 1
        If lngRow > Rows.Count Then
          MsgBox "Voll!"
          Exit Sub
        End If
        With objTar
          objSh.Range(objSh.Cells(rng.Row, 1), objSh.Cells(rng.Row, 31)).Copy .Rows(lngRow)
          .Hyperlinks.Add _
            Anchor:=.Cells(lngRow, 32), _
            Address:="", _
            SubAddress:="'" & objSh.Name & "'!" & rng.Address, _
            TextToDisplay:=objSh.Name & ", " & rng.Address(0, 0)
        End With
        Set rng = objSh.Range("A:E").FindNext(rng)
      Loop While Not rng Is Nothing And strFirst <> rng.Address
    End If
  End If
Next

MsgBox "Suche beendet!"

ErrExit:

Set objTar = Nothing
Set rng = Nothing

If Err.Number > 0 Then
  MsgBox Err.Number & vbLf & Err.Description, , "Fehler"
  Err.Clear
End If

With Application
  .ScreenUpdating = True
  .EnableEvents = True
  .DisplayAlerts = True
  .Calculation = xlCalculationAutomatic
  .Cursor = xlDefault
End With

End Sub



Sollte es bei dir weiterhin nicht klappen, dann lade doch mal deine Mappe hoch.
Ich schau morgen wieder rein, gute Nacht.
Gruß Sepp

Anzeige
Fehler 1004 Range Objekt
15.07.2006 12:41:19
Mathias
ES kommt weiterhin folgende Fehlermeldung - 1004 "Die Find Eigenschaft des Range Objektes kann nicht zugeordnet werden)". Kann von diesem PC jetzt leider nicht hochladen - unsere EDV hat dies für uns gesperrt. Leider. Aber vielelicht sagt dir der Fehler ja was bzw. du kannst mir einen Tipp geben, an welcher Stelle ggf. etwas falsch sein könnte. Danke nochmals für deine/eure Hilfe.
AW: Fehler 1004 Range Objekt
15.07.2006 12:46:58
Josef
Hallo Mathias!
Hast du meinen Code kopiert, oder hast du was verändert?
Wenn du was verändert hast, dann zeig mal deinen Code.
Gruß Sepp

AW: Fehler 1004 Range Objekt
15.07.2006 13:08:12
Mathias
Habe es jetzt eben noch einmal ganz neu ausprobiert - Datei komplett neu angelegt - und nun läuft es auch bei mir. Muss ich mir gestern Nacht wohl irgendwas zerschossen haben. Eine Frage habe ich aber noch. Kann ich den Suchbereich weiter eingrenzen? In allen Datenblättern stehen immer in bestimmten Bereichen die zu suchenden Einträge. Es müsste also nicht zwingend die ganze Spalte, sondern nur der Bereich durchsucht werden. Könnte mir vorstellen, dass es dann schneller geht.
Zu suchende Daten sind z.B. in A1-E10, A25-E35, A51-E89 und in A102-E200
Wenn ich aus dem ("A:E") dann ("A1:E10, A25:E35, A51:E90, A102:E200") mache - bei beiden Zeilen mit dem Set rng = objsh.Range... wäre das dann richtig?
Anzeige
AW: Fehler 1004 Range Objekt
15.07.2006 13:13:00
Herbert
"Könnte mir vorstellen, dass es dann schneller geht."
Find ist so sauschnell, dass der Unterschied kaum messbar sein wird.
mfg Herbert
AW: Fehler 1004 Range Objekt
15.07.2006 13:16:02
Mathias
Dann war es wohl nur ein naiver Laiengedanke... dann kann ich es ja so lassen. Ist nämlich echt super. Danke für eure Geduld!
AW: Fehler 1004 Range Objekt
15.07.2006 13:13:59
Josef
Hallo Matthias!
Nein, das bringt nichts, weil die Find-Methode so schnell ist, daß du keinen Unterschied
merken wirst. Die Zeit geht beim Eintragen der Fundstellen in die Tabelle verloren.
Gruß Sepp

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige