Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1484to1488
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
Inhaltsverzeichnis

Suchen und Ausgabe

Suchen und Ausgabe
24.03.2016 13:50:59
Marco
Hallo hoffe mir kann jmd helfen also ich habe folgendes:
Eine Arbeitsmappe: Auf Tabelle 1 ist ein Suchen Button, der durchsucht dann alle Tabellen und gibt dann auch auf Tabelle 1 das Ergebnis aus.
Programm:
Private Sub CommandButton1_Click()
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 _
("Bitte den zu suchenden Begriff eingeben. Sollen 2 Werte" & vbCrLf & _
"gleichzeitig gesucht werden, dann mit Zeichen  +  " & vbCrLf & _
"voneinander trennen (z.B.: Summe+die)." & vbCrLf & vbCrLf & _
"ENTER ohne Wert = Abbruch", "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
' 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
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 kein übereinstimmender Wert gefunden", _
vbOKOnly, "G E F U N D E N E   W E R T E")
Exit Sub
Case Else
Meldung = MsgBox("Es wurden " & (x - 1) & " Übereinstimmungen gefunden.", _
vbOKOnly, "G E F U N D E N E   W E R T E")
'Tabelle einfügen
'Worksheets.Add.Move after:=Worksheets(Worksheets.Count)
On Error Resume Next
With ActiveSheet
.Name = "Startseite"
.[I5] = "Suchergebnis"
For n = 1 To x - 1
.Cells(n + 7, 9) = xTabelle(n)
.Cells(n + 7, 10) = Adresse(n)
Next n
End With
End Select
End Sub

Das funktioniert auch soweit, jetzt möchte ich a) nur das quasi eine Kopie meiner gefunden Zeilen ausgegeben wird und nicht der Fundort und b) das dass Suchergebnis am Ende wieder verschwindet bzw wenn ich erneut auf Suchen klicke dann soll das vorherige Ergebnis verschwinden.
Hilfe wäre Klasse

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Suchen und Ausgabe
24.03.2016 14:38:40
Steve
Hallo Marco,
zu a)
Eine Kopie der Zelle bedeutet im Normalfall dass auch sämtliche Formate mit kopiert werden, _ wenn das nicht gewünscht ist ändere bitte am Ende des Codes:

For n = 1 To x - 1
.Cells(n + 7, 9) = Sheets(CStr(xTabelle(n))).Range(Adresse(n))
Next n
Falls doch lautet es:
    For n = 1 To x - 1
Sheets(CStr(xTabelle(n))).Range(Adresse(n)).Copy .Cells(n + 7, 9)
Next n
zu b)
Wenn das Makro am Ende seiner Tätigkeit angelangt ist erstellt es dir das Blatt damit du es _ einsehen kannst. Es wartet nicht bis du fertig bist und kann daher hinterher das Blatt nicht löschen. Was es aber umsetzen kann wäre dein zweiter Vorschlag, das Blatt vorher zu leeren. Füge dies vor den Abschnitt der Inputbox ein:

On Error Resume Next
Sheets("Startseite").Cells.Clear
On Error GoTo 0
Falls ein Filter auf dem Ergebnisblatt aktiv seien kann, schreibe einfach die Zeile "Sheets("Startseite").Cells.Clear" zweimal an besagte Stelle (zwischen die OnErrors).
lg Steve

Anzeige
AW: Suchen und Ausgabe
24.03.2016 14:55:03
Marco
Hallo Steve,
erstmal Danke für die Hilfe
b)klappt super
zu a)klappt bedingt, nur das mir die Zelle ausgegeben wird wo er den Suchwert findet und nicht wie gewünscht auch den Zellen Inhalt der Nachbarzellen links rechts davon

AW: Suchen und Ausgabe
24.03.2016 15:05:03
Steve
Entschuldige,
zwischen Zellen und Zeilen ist nur ein winziger Pixel Unterschied, aber die _ Bedeutung kann ganz unterschiedlich werden.

Sheets(CStr(xTabelle(n))).Range(Adresse(n)).EntireRow.Copy .Cells(n + 7, 9)
lg Steve

AW: Suchen und Ausgabe
29.03.2016 07:25:57
Marco
Morgen Steve,
wenn ich die Zeile einfüge gibt er mir gar nix mehr aus.
hier ein Beispiel:
E-00016 |DIN EN ISO 4762 M3x6-8.8|Zylinderkopfschraube|Bestellnummer
E-00017 |DIN EN ISO 4762 M3x8-8.8|Zylinderkopfschraube|Bestellnummer
E-00018 |DIN EN ISO 4762 M3x10-8.8|Zylinderkopfschraube|Bestellnummer
E-00019 |DIN EN ISO 4762 M3x12-8.8|Zylinderkopfschraube|Bestellnummer
E-00020 |DIN EN ISO 4762 M3x16-8.8|Zylinderkopfschraube|Bestellnummer
E-00021 |DIN EN ISO 4762 M3x20-8.8|Zylinderkopfschraube|Bestellnummer
E-00022 |DIN EN ISO 4762 M3x25-8.8|Zylinderkopfschraube|Bestellnummer
E-00023 |DIN EN ISO 4762 M3x30-8.8|Zylinderkopfschraube|Bestellnummer
(die senkrechten Striche sind die Trennung für die Zelle)
ich suche jetzt nach M3 (klappt ja auch) und ausgeben soll er mir alle M3´s und dazugehörige Zeile (so sind alle Tabellen im Worksheet aufgebaut).

Anzeige
AW: Suchen und Ausgabe
29.03.2016 08:38:20
Steve
Guten Morgen Marco,
ohne das OnError bringt er mir einen Fehler dass er mit der Methode für das Objekt nicht zurecht kommt. Im Klartext: Er kann keine komplette Zeile ab Spalte I einfügen. Hier darf nur die PasteSpecial Methode angewandt werden.
    Sheets(CStr(xTabelle(n))).Range(CStr(Adresse(n))).EntireRow.Copy
.Cells(n + 7, 1).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
lg Steve

AW: Suchen und Ausgabe
29.03.2016 09:30:22
Marco
Genau so wollte ich es haben. Danke Steve

AW: Suchen und Ausgabe
29.03.2016 11:14:57
Marco
Hey Steve hab da doch noch etwas ;-)
....
Worksheets.Add.Move after:=Worksheets(Worksheets.Count)
On Error Resume Next
With ActiveSheet
.Name = "Suchen"
.[A5] = "Suchergebnis"
.[A6] = "ERP-NR"
.[C6] = "Technischer Text"
.[D6] = "Technischer Text"
.[E6] = "blabla"
For n = 1 To x - 1
Sheets(CStr(xTabelle(n))).Range(CStr(Adresse(n))).EntireRow.Copy
.Cells(n + 7, 1).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Next n
End With
End Select
C6 und D6 (nur ein Text in beiden Zellen) sollen verbunden werden und ich möchte Zellenfarben und Schriftfarbe von A5 bis E6 beeinflussen. Muss ja über VBA ,da ja das Blatt immer wieder gelöscht wird.

Anzeige
AW: Suchen und Ausgabe
29.03.2016 13:39:56
Steve
Hallo Marco,
in Kurzform:
    .Range("C6:D6").Merge
With .Range("A5:E6")
.Interior.Pattern = xlSolid
.Interior.PatternColorIndex = xlAutomatic
.Interior.Color = 65535
.Font.Color = -16776961
End With
Die gewünschte Farbe kann man mit dem Makrorecorder herausfinden, einfach Aufzeichnung starten (Register Entwicklertools), Zellen/Schrift färben und Aufzeichnung beenden. Die entsprechenden Eigenschaften dann einfach kopieren und bei deinem Code ersetzen.
Achtung, bei einigen Farben wird das Attribut ".Interior.ColorIndex" statt ".Interior.Color" verwendet, dann kannst du letzteres rausstreichen.
Falls du die Farbpalette nutzt und deine Farben in Rot/Grün/Blau angeben willst sähe das wie folgt aus:
        .Interior.Color = RGB(255, 0, 0)
lg Steve

Anzeige
AW: Suchen und Ausgabe
30.03.2016 08:56:04
Marco
Guten Morgen Steve,
wie zu erwarten TOP Ergebnis, so wollte ich es !!!
Danke!

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige