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

Forumthread: VBA - Vlookup

VBA - Vlookup
19.06.2020 09:51:41
Herbert
Hallo meine Lieben,
ich wollte einen Sverweis in VBA anwenden, der als Suchkriterium den Wert einer TextBox nimmt und dann damit den Wert den ich erlangen will aus einer Tabelle die in einem anderen Tabellenblatt ist bekomme.
Hier der Code:
Dim Mitarbeiter_Name As String
Mitarbeiter_Name = WorksheetFunction.VLookup(TextBox_Name.Value, Worksheets("Einstellungen").Sheets("Tabelle9").[AC3:AF55], 4, False)
Vielen Dank schonmal im Voraus!
MfG Herbert!
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: VBA - Vlookup
19.06.2020 09:58:45
Herbert
Hallo,
Ich nochmal.
Sobald der Code ausgeführt wird, kommt der Laufzeitfehler "9".
VBA sagt der Index ist nicht bestimmt.
MfG Herbert!
AW: VBA - Vlookup
19.06.2020 10:05:18
Hajo_Zi
Hallo Herbert,
Zu Deiner Datei kann ich nichts schreiben, was wohl daran liegt das ich nicht auf fremde Rechner schaue.Ich baue keine Datei nach.
Sollte die Datei verlinkt werden?
Wenn du an Stelle einer Demomappe deine Originalmappe hochladen willst, diese aber sensible Daten enthält, kannst du diese Daten
http://www.ms-office-forum.de/forum/showthread.php?t=322895
änderrn.
Bilder lade ich mir nicht runter, da Excel damit nichts anfangen kann.
http://www.excel-ist-sexy.de/bilder-statt-datei/
Hochgeladene Bilder können zwar als solche in Excel importiert werden, sind jedoch bei der Lösung von Problemen nicht sehr hilfreich, da man die eigentlichen Daten nicht ohne große und zeitraubende Umwege direkt in die Tabelle übertragen kann.
Das ist nur meine Meinung zu dem Thema.
Der Befehl sieht erstmal ok aus.

Anzeige
übersehen 2 x Sheets
19.06.2020 10:06:27
Hajo_Zi
AW: übersehen 2 x Sheets
19.06.2020 10:23:35
Herbert
Hallo Hajo,
hab es schon hinbekommen,
der Code an sich funktioniert jetzt, ich musste die Tabelle in dem Tabellenblatt nur anders definieren.
Dim Mitarbeiter_Name As String
Mitarbeiter_Name = WorksheetFunction.VLookup(TextBox_Name.Value, Sheets("Einstellungen").[Tabelle9], 4, False)
Am Ende sieht der komplette Code der ausgeführt wird dann so aus:
Dim Mitarbeiter_Name As String
Mitarbeiter_Name = WorksheetFunction.VLookup(TextBox_Name.Value, Sheets("Einstellungen").[ _
Tabelle9], 4, False)
If CheckBox_auto_Ordner.Value = True Then
If Dir("X:\8. Mitarbeiter\" & Mitarbeiter_Name & "\Achsbilder\Achsbild", vbDirectory) = "" Then
MkDir ("X:\8. Mitarbeiter\" & Mitarbeiter_Name & "\Achsbilder\Achsbild")
MsgBox "Ordner ''Achsbilder'' wurde angelegt!"
Else
MsgBox "Ordner ''Achsbilder'' ist vorhanden!"
End If
End If
End Sub

Anzeige
AW: übersehen 2 x Sheets
19.06.2020 10:27:27
Herbert
Noch mal ich,
ja ich weiß, aber ich kann die Datei hier so nicht hochladen,
weil ich das Datenlimit überschreite mit der Datei.
Ich habe 16 Tabellenblätter wo 14 Tabellenblätter voll mit Formeln sind und alle beinhalten
VBA Formen.
Wodurch ich auf eine größe von 517kb komme und 327kb sind erlaubt zum hochladen, aber trzd. vielen Dank!
MfG Herbert!
Anzeige
AW: VBA - Vlookup
19.06.2020 10:03:14
Beverly
Hi Herbert,
was soll Worksheets("Einstellungen").Sheets("Tabelle9") denn sein? Da sind doch die Namen von 2 Tabellenblättern zusammengezogen - das ist Unsinn. Wo soll denn gesucht werden - in "Einstellungen" oder in "Tabelle9"?


Anzeige
AW: VBA - Vlookup
19.06.2020 10:11:27
Herbert
Hallo,
hab es schon hinbekommen und nein...,
das eine ist das Tabellenblatt: "Einstellungen"
das andere eine Tabelle mit den Mitarbeiter Namen und deren Speicherpfade für das Tool: "Tabelle9"
Am anfang zieht sich das Tool den jeweils an dem Pc eingeloggten User und weiß das dieser an dem Tool ist, dann hat er aber nur z.B.: "Max Mustermann"
Und weil ich mich mit Excel nicht wie ein Profi auskenne, habe ich mit Formeln im Excelblatt in der letzten Spalte dann den Namen so definiert: "Mustermann, Max", weil bei uns die Mitarbeiterordner so gestaltet sind.
Ich weiß es gibt sogesehen einfachere Wege, aber die wären für mich glaube ich ein wenig zu komplex.
Bin zur Zeit mehr an Access VBA und dem Kram, als in Excel.
Hier aber nochmal der funktionierende Code:
Dim Mitarbeiter_Name As String
Mitarbeiter_Name = WorksheetFunction.VLookup(TextBox_Name.Value, Sheets("Einstellungen").[ _
Tabelle9], 4, False)
If CheckBox_auto_Ordner.Value = True Then
If Dir("X:\8. Mitarbeiter\" & Mitarbeiter_Name & "\Achsbilder", vbDirectory) = "" Then
MkDir ("X:\8. Mitarbeiter\" & Mitarbeiter_Name & "\Achsbilder")
MsgBox "Ordner ''Achsbilder'' wurde angelegt!"
Else
MsgBox "Ordner ''Achsbilder'' ist vorhanden!"
End If
End If
End Sub
trzd. Vielen Dank!
MfG Herbert!
Anzeige
AW: VBA - Vlookup : Vorsicht
19.06.2020 10:40:24
peterk
Hallo
WorksheetFunction.VLookup wirft eine Exception wenn nichts gefunden wird, daher muss diese abgefangen werden sonst wird das Programm beendet!
Besser wäre Application.VLookup, hier kann man den Fehler mit IsError(Mitarbeiter_Name) einfach abfragen, dieser Befehl wirft keine Exception (ansonsten gleich).
Peter
Anzeige
AW: VBA - Vlookup : Vorsicht
19.06.2020 10:42:12
Herbert
Hallo,
Danke, werde ich mir merken!
Aber bisher funktioniert es ja.
Trzd. vielen Dank!
MfG Herbert!
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

VBA VLOOKUP: Anwendung und Fehlerbehebung


Schritt-für-Schritt-Anleitung

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

  2. Modul einfügen: Klicke mit der rechten Maustaste auf dein Projekt im Projekt-Explorer und wähle Einfügen > Modul.

  3. Code eingeben: Füge den folgenden Code ein, um die VLOOKUP-Funktion zu nutzen:

    Dim Mitarbeiter_Name As String
    Mitarbeiter_Name = Application.VLookup(TextBox_Name.Value, Sheets("Einstellungen").[Tabelle9], 4, False)
  4. Fehlerbehandlung hinzufügen: Um Laufzeitfehler zu vermeiden, kannst du die Fehlerbehandlung einfügen:

    If IsError(Mitarbeiter_Name) Then
        MsgBox "Mitarbeiter nicht gefunden!", vbExclamation
    Else
        ' Weiterverarbeitung
    End If
  5. Prozedur testen: Führe die Prozedur aus und überprüfe, ob die Ergebnisse korrekt sind.


Häufige Fehler und Lösungen

  • Laufzeitfehler "9": Dieser Fehler tritt auf, wenn der Index oder die Referenz nicht korrekt ist. Achte darauf, dass die Tabellenblätter und Zellbereiche richtig definiert sind. Beispiel:

    Mitarbeiter_Name = WorksheetFunction.VLookup(TextBox_Name.Value, Sheets("Einstellungen").[Tabelle9], 4, False)
  • Falsche Blattreferenz: Stelle sicher, dass du nicht Worksheets und Sheets zusammen verwendest, wie in:

    Worksheets("Einstellungen").Sheets("Tabelle9") ' Falsch

    Verwende stattdessen nur Sheets("Einstellungen").[Tabelle9].


Alternative Methoden

  • XLOOKUP in VBA: Wenn du Excel 365 verwendest, kannst du die XLOOKUP-Funktion nutzen, die flexibler ist als VLOOKUP. Beispiel:

    Mitarbeiter_Name = Application.XLookup(TextBox_Name.Value, Sheets("Einstellungen").[Tabelle9].Columns(1), Sheets("Einstellungen").[Tabelle9].Columns(4))
  • Verwendung von Application.VLookup: Diese Methode erlaubt eine bessere Fehlerbehandlung, da sie keine Ausnahme auslöst, wenn der Suchwert nicht gefunden wird.


Praktische Beispiele

Hier ist ein komplettes Beispiel für eine Prozedur, die den Namen eines Mitarbeiters aus einer TextBox abruft und einen Ordner erstellt, falls der Mitarbeiter existiert:

Sub MitarbeiterOrdnerErstellen()
    Dim Mitarbeiter_Name As String
    Mitarbeiter_Name = Application.VLookup(TextBox_Name.Value, Sheets("Einstellungen").[Tabelle9], 4, False)

    If Not IsError(Mitarbeiter_Name) Then
        If CheckBox_auto_Ordner.Value = True Then
            If Dir("X:\8. Mitarbeiter\" & Mitarbeiter_Name & "\Achsbilder", vbDirectory) = "" Then
                MkDir ("X:\8. Mitarbeiter\" & Mitarbeiter_Name & "\Achsbilder")
                MsgBox "Ordner 'Achsbilder' wurde angelegt!"
            Else
                MsgBox "Ordner 'Achsbilder' ist vorhanden!"
            End If
        End If
    Else
        MsgBox "Mitarbeiter nicht gefunden!", vbExclamation
    End If
End Sub

Tipps für Profis

  • Verwende Option Explicit: Diese Anweisung zwingt dich, alle Variablen zu deklarieren, was Fehler reduziert.
  • Fehlerprotokollierung: Implementiere ein Protokoll, um Fehler während der Ausführung zu speichern, besonders wenn du mit großen Datenmengen arbeitest.
  • Dokumentation: Kommentiere deinen Code ausführlich, um die Wartung und das Verständnis zu erleichtern.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass der VLOOKUP-Wert korrekt ist?
Verwende die IsError-Funktion, um zu prüfen, ob der Wert gefunden wurde, bevor du damit weiterarbeitest.

2. Was ist der Unterschied zwischen WorksheetFunction.VLookup und Application.VLookup?
WorksheetFunction.VLookup wirft einen Fehler, wenn der Wert nicht gefunden wird, während Application.VLookup kein Fehlerobjekt zurückgibt, was die Fehlerbehandlung erleichtert.

3. Kann ich VLOOKUP in einer Schleife verwenden?
Ja, du kannst VLOOKUP innerhalb einer Schleife verwenden, um mehrere Werte zu überprüfen, jedoch solltest du darauf achten, die Leistung zu optimieren.

4. Welche Excel-Version benötige ich für XLOOKUP?
XLOOKUP ist in Excel 365 und Excel 2021 verfügbar.

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