Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: suche mit Makro auf anderem Tabellenblatt

suche mit Makro auf anderem Tabellenblatt
28.07.2014 12:44:31
Dietmar
Hallo an alle,
da bin ich schon wieder mit einem Problem.
Ich habe mal ein Beispiel beigefügt, meine dortige Anmerkung ist mein Problem.
Das Makro habe ich mal gefunden, müsste jedoch geändert werden ( das ist genau mein
Problem ).
https://www.herber.de/bbs/user/91753.xls
Gruß
Dietmar

Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: suche mit Makro auf anderem Tabellenblatt
28.07.2014 12:52:27
Hajo_Zi
Hallo Dietmar,
es wäre ja fast Klasse, wenn in der Suchspalte auch was stehen würde.
Select, Activate usw. ist in VBA zu 99,9% nicht notwendig.
Der Cursor ist kein Hund der überall rumgeführt werden muss.
Hinweise zu select usw. Hajo-Excel.de
Hinweise zu select usw. Online-Excel.de
Hinweise zu select usw. Online-Excel.de
Private Sub CommandButton1_Click()
Dim rngFind As Range
Dim strTitel As String
strTitel = InputBox("Artikel-Nr.:", "Artikel-Nr. eingeben", , 5, 5)
With Worksheets("Tabelle2")
Set rngFind = .Columns("B").Find(strTitel, _
LookIn:=xlFormulas)
If Not rngFind Is Nothing Then
MsgBox "Es wurde gefunden in Zeile " & rngFind.Row
Else
MsgBox "Es wurde nichts gefunden"
End If
End With
End Sub

Anzeige
AW: suche mit Makro auf anderem Tabellenblatt
28.07.2014 14:49:38
Dietmar
Hallo Hajo,
tut mir leid wenn ich das so schlecht vorbereitet habe, aber natürlich vielen Dank
für deine Problemlösung
Gruß
Dietmar

AW: suche mit Makro auf anderem Tabellenblatt
28.07.2014 12:55:12
Daniel
wenn du mit mehreren Tabellenblättern arbeitest, dann musst du vor jedem Zellbezug (Range, Cells, Rows, Columns) das Tabellenblatt davor schreiben.
Zellbezüge ohne Tabellenblattangabe davor beziehen sich immer entweder auf:
a) auf das Tabellenblatt des Moduls, wenn der Code so wie bei dir in einem Tabellenblattmodul liegt
b) auf das aktive Tabellenblatt, wenn der Code in einem allgemenien Modul oder einer Userform liegt.
Selektieren und Aktivieren funktioniert immer nur auf dem aktiven Tabellenblatt, deswegen sollte das unterbleiben, wenn man mit mehreren Tabellenblättern arbeitet:
Private Sub CommandButton1_Click()
Dim rngFind As Range
Dim strTitel As String
strTitel = InputBox("Artikel-Nr.:", "Artikel-Nr. eingeben", , 5, 5)
Set rngFind = Sheets("Tabelle2").Columns("B").Find(strTitel, LookIn:=xlFormulas)
If Not rngFind Is Nothing Then
MsgBox rngFind.Value
Else
MsgBox "Es wurde nichts gefunden"
End If
End Sub
Gruß Daniel

Anzeige
AW: suche mit Makro auf anderem Tabellenblatt
28.07.2014 14:48:22
Dietmar
Hallo Daniel,
vielen Dank für die Problemlösung
Gruß
Dietmar

AW: suche mit Makro auf anderem Tabellenblatt
28.07.2014 19:17:16
Adis
Hallo
das Ergebnis im Forum ist vielleicht nicht optimal ausgefallen, denn der letzte Code laeuft nicht!
Ich habe es in einer Beispieldatei selbst geprüft und kein Ergebnis bekommen. (Syntacs Fehler)
Set rngFind = Sheets("Tabelle2").Columns("B").Find(strTitel, LookIn:=xlFormulas)
Anbei eine Beispieldatei als sog. Universal Such-Datei für Suche in einer Tabelle
Würde mich freuen wenn sie weiter hilft. Ein Such-Blatt anlegen und Makro kopieren.
https://www.herber.de/bbs/user/91762.xls
Gruss Adis

Anzeige
So nicht !!!
28.07.2014 19:53:12
Nepumuk
Hallo Adis,
wenn du das Forum schon mit deinen Lösungen beglückst, schreib bitte dazu, dass sie unter Umständen dazu führen das alle öffentlichen, lokalen und statischen Variablen zurückgesetzt und damit auch alle Klassen mit aktiven Instanzen zerstört werden.
GoSub, unnötige On Error-Anweisungen und unnötige Sektiererei tun ein übriges um den Code unübersichtlich und langsam zu machen.
Und das Deklarieren von Variablen müssen wir auch noch üben.
Gruß
Nepumuk

Anzeige
AW: So nicht !!!
28.07.2014 22:48:04
Adis
persönliches Hallo an Nepumuk
Es gibt gleich 2 Kritiken an mir, auch wegen der Beispiel Datei Laufwerk C: auflisten. Ich möchte beides hören.
Ja, ich nehme Kritik ernst, bin hier zutiefst betroffen über den Vorwurf Dateienn zu zerstören,nur nehmen alle Excel Profis bitte etwas zur Kenntnis. Wenn man mich niedermacht gehe ich zuerst in die Knie und bin verwirrt, denn der Vorwurf hat es in sich. Das wäre ja ernste Gefährdung von ahnungslosen Fragenden, die ja nicht damit rechnen das damit ihre Dateien zerstören könnten.
Ich bin kein Excel Profi, aber meine Gründlichkeit besteht darin solche Vorwürfe zu prüfen. Indem ich eigene Beispiel Dateien öffen und höflich um Angaben bitte wie man die zerstört. Das will ich selbst sehen!! Ich bin bereit berechtigte Kritik anzunehmen und zu beachten. Meine Stärke ist lieber alles zu prüfen, besonders in Grundsatzfragen die Dateien gefährden können.
Meines Wissens kann ich keine öffentlichen Variablen zerstören, weil alle Makros lediglich in meiner Beispiel Datei laufen, mit Dim deklariert sind (nicht Public), und keine anderen Makros aufgerufen werden. Lediglich die Set Variablen wurden zum Schluss nicht gelöscht. Ob Set Variable in einer anderen Mappe die geöffnet ist weiter existieren weiss ich nicht, prüfe es aber nach. Ich habe auch nicht verstanden wie ich konstante Variable veränderen soll, oder ganze Klassen zerstören kann?
Deutlich erkennbar ist für mich das die Profis im Forum alle Variable auf ihre Art deklarieren. Darin kann man Klassen oder Typen erkennen. Diese Schreibweise ist aber nicht zwingend notwendig. Weil alle Profis die MS Empfehlung beachten dürften sie kaum mit meinen Variablen in Konflikt kommen. Für mich sind sie leichter verständlich. Wo liegt also hier das Problem?
Vielleicht liegt der Hauptpunkt des Ärgerniss ja in meiner Antwort das die Syntac nicht klappt. Das habe ich überprüft, denn mir ist aufgefallen das beim Suchlauf Tabelle2 nicht angegeben war. Das wurde ja berichtigt, aber einfach übersehen, das die Suchdaten in Tabelle2 in Spalte A stehen. Computer sind nun mal nicht schlau, sie können Fehler nicht selbst korrigieren. Die Rückmeldung musste logischweise lauten: MsgBox "kann keine Daten finden"
Das ist mir aber selbst erst aufgefallen, als ich das Makro in einer Mappe getestet habe. Ich war erstaunt das es nicht klappte, und dann kontrollierte ich so lange, bis ich den Schreibfehler sah.
Gruss Adis

Anzeige
AW: So nicht !!!
28.07.2014 23:32:58
Nepumuk
Hallo Adis,
sobald ich auf diese Anweisung laufe: End
Sind alle Variablen zurückgesetzt und alle Klassen zerstört. Nicht irgendeine Datei. Klassen sind virtuelle Objekte die ich im Arbeitsspeicher anlege und die werden dabei gelöscht. Auch geöffnete Datenbanken werden geschlossen.
Diese Anweisung ist, wenn es nur dieses eine Makro in der Mappe gibt kein Problem. Ich habe aber Mappen mit über 100.000 Zeilen Code die teilweise auf 2-3 Datenbanken zugreifen und da ist die End-Anweisung pures Gift. Ich muss nämlich anschließend die Klassen neu initialisieren, Variablen füllen und Datenbanken wieder verbinden (das dauert ein paar Sekunden).
Für mich ist dein Makro ja auch kein Problem, denn darauf bin ich nicht angewiesen. Aber es gibt genügend Leute die sich Code aus Foren zusammenklauben ohne groß Zusammenhänge zu verstehen. Und darum muss ein Code nicht nur solitär funktionieren sondern darf auch in komplexeren Strukturen keine nachteilige Auswirkung haben.
Gruß
Nepumuk
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Werte aus anderem Tabellenblatt suchen und übernehmen


Schritt-für-Schritt-Anleitung

Um einen Wert aus einem anderen Tabellenblatt in Excel zu suchen und zu übernehmen, kannst Du das folgende VBA-Makro verwenden. Dieses Beispiel zeigt, wie Du eine Artikelnummer in "Tabelle2" suchst und das Ergebnis zurückgibst.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject" > Einfügen > Modul.

  3. Kopiere folgenden Code in das Modul:

    Private Sub CommandButton1_Click()
       Dim rngFind As Range
       Dim strTitel As String
       strTitel = InputBox("Artikel-Nr.:", "Artikel-Nr. eingeben", , 5, 5)
       With Worksheets("Tabelle2")
           Set rngFind = .Columns("B").Find(strTitel, LookIn:=xlFormulas)
           If Not rngFind Is Nothing Then
               MsgBox "Es wurde gefunden in Zeile " & rngFind.Row
           Else
               MsgBox "Es wurde nichts gefunden"
           End If
       End With
    End Sub
  4. Schließe den VBA-Editor und gehe zurück zu Excel.

  5. Füge einen Button hinzu und verlinke ihn mit dem Makro.

Du kannst nun die Artikelnummer eingeben und das Makro wird den Wert in "Tabelle2" suchen.


Häufige Fehler und Lösungen

  1. Fehler: "Es wurde nichts gefunden"
    Lösung: Stelle sicher, dass die Artikelnummer genau so eingegeben wird, wie sie in "Tabelle2" steht. Achte auf Groß- und Kleinschreibung sowie Leerzeichen.

  2. Fehler: Das Makro läuft nicht
    Lösung: Überprüfe, ob der Tabellenblattname korrekt ist. In diesem Fall sollte es "Tabelle2" sein. Wenn Du einen anderen Namen verwendest, ändere den Code entsprechend.

  3. Syntaxfehler im Code
    Lösung: Achte darauf, dass Du den Code genau kopierst. Ein fehlendes Zeichen oder ein falsches Zeichen kann zu einem Fehler führen.


Alternative Methoden

Neben dem VBA-Ansatz kannst Du auch die integrierte Excel-Funktion SVERWEIS verwenden, um Werte aus einem anderen Tabellenblatt zu suchen. Hier ist ein Beispiel:

=SVERWEIS(A1; Tabelle2!B:C; 2; FALSCH)

In diesem Beispiel wird in "Tabelle2" nach dem Wert in Zelle A1 gesucht, und der entsprechende Wert aus der zweiten Spalte (C) wird zurückgegeben.


Praktische Beispiele

  • Beispiel 1: Suche nach einem Artikelwert und übernehme die Beschreibung aus "Tabelle2".

    Dim rngFind As Range
    Set rngFind = Worksheets("Tabelle2").Columns("B").Find("Artikel123")
    If Not rngFind Is Nothing Then
      MsgBox "Beschreibung: " & rngFind.Offset(0, 1).Value
    End If
  • Beispiel 2: Suche und übernehme einen Preis aus "Tabelle2".

    Dim rngFind As Range
    Set rngFind = Worksheets("Tabelle2").Columns("B").Find("Artikel456")
    If Not rngFind Is Nothing Then
      MsgBox "Preis: " & rngFind.Offset(0, 2).Value
    End If

Tipps für Profis

  • Verwende Fehlerbehandlungsroutinen in Deinem Code, um unerwartete Fehler abzufangen.
  • Optimiere Deinen Code, indem Du Select und Activate vermeidest, um die Ausführungsgeschwindigkeit zu erhöhen.
  • Teste den Code immer in einer Kopie Deiner Arbeitsmappe, um unerwünschte Änderungen zu vermeiden.

FAQ: Häufige Fragen

1. Wie kann ich den Code anpassen, um in anderen Spalten zu suchen?
Du kannst die Columns("B")-Angabe im Code ändern, um eine andere Spalte zu durchsuchen. Zum Beispiel Columns("A") für die Spalte A.

2. Funktioniert dieses Makro in allen Excel-Versionen?
Ja, das Makro sollte in allen modernen Excel-Versionen (Excel 2010 und neuer) funktionieren, die VBA unterstützen.

3. Kann ich das Makro auch für mehrere Tabellenblätter verwenden?
Ja, Du kannst den Code anpassen, um durch verschiedene Tabellenblätter zu iterieren, indem Du eine Schleife einfügst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige