Anwendung von Application.Match in VBA
Schritt-für-Schritt-Anleitung
-
Öffne Excel und gehe zu dem Arbeitsblatt, in dem du mit VBA arbeiten möchtest.
-
Öffne den VBA-Editor mit ALT + F11.
-
Erstelle ein neues Modul: Klicke mit der rechten Maustaste im Projekt-Explorer und wähle „Einfügen“ > „Modul“.
-
Füge folgenden Code ein:
Sub Schreiben()
Dim sh As Worksheet, n As Variant
Set sh = ThisWorkbook.Sheets("Bewohner")
n = Application.Match(UF4_Tab4_Ändern.CB_Zimmer.Value, sh.Range("A:A"), 0)
If IsNumeric(n) Then
sh.Range("B" & n).Value = UF4_Tab4_Ändern.TB_Name.Value
sh.Range("C" & n).Value = UF4_Tab4_Ändern.TB_Vorname.Value
sh.Range("E" & n).Value = UF4_Tab4_Ändern.TB_GebDate.Value
sh.Range("F" & n).Value = UF4_Tab4_Ändern.ChB_Dia_ja.Value
sh.Range("G" & n).Value = UF4_Tab4_Ändern.ChB_Dia_nein.Value
sh.Range("H" & n).Value = UF4_Tab4_Ändern.ChB_Ins_ja.Value
sh.Range("I" & n).Value = UF4_Tab4_Ändern.ChB_Ins_nein.Value
sh.Range("J" & n).Value = UF4_Tab4_Ändern.TB_PEG.Value
End If
Set sh = Nothing
End Sub
-
Führe das Makro aus, um die Daten wie gewünscht zu schreiben.
Häufige Fehler und Lösungen
-
Laufzeitfehler "13" - Typen unverträglich: Dieser Fehler tritt auf, wenn der Suchbegriff nicht im angegebenen Bereich gefunden wird. Stelle sicher, dass der Wert in der ComboBox UF4_Tab4_Ändern.CB_Zimmer nicht leer ist.
Lösung: Überprüfe den Inhalt der ComboBox vor dem Aufruf von Application.Match:
If Not IsEmpty(UF4_Tab4_Ändern.CB_Zimmer.Value) Then
n = Application.Match(UF4_Tab4_Ändern.CB_Zimmer.Value, sh.Range("A:A"), 0)
End If
-
Kein Treffer gefunden: Wenn der Wert nicht in Spalte A zu finden ist, wird n den Wert Error 2042 annehmen. Verwende IsNumeric(n), um dies zu prüfen.
Alternative Methoden
-
Verwendung von Application.WorksheetFunction.Match:
Du kannst auch die Excel-Funktion direkt verwenden:
n = Application.WorksheetFunction.Match(UF4_Tab4_Ändern.CB_Zimmer.Value, sh.Range("A:A"), 0)
-
Nutzung von Find: Eine Alternative zur Match-Funktion ist die Find-Methode:
Dim foundCell As Range
Set foundCell = sh.Range("A:A").Find(UF4_Tab4_Ändern.CB_Zimmer.Value)
If Not foundCell Is Nothing Then
n = foundCell.Row
End If
Praktische Beispiele
Angenommen, du hast eine ComboBox, die Zimmernummern enthält und du möchtest die entsprechenden Daten in einem Worksheet einfügen:
Sub SchreibeDaten()
Dim sh As Worksheet, n As Variant
Set sh = ThisWorkbook.Sheets("Bewohner")
' Annehmen, dass CB_Zimmer eine Zimmernummer hat
n = Application.Match(UF4_Tab4_Ändern.CB_Zimmer.Value, sh.Range("A:A"), 0)
If IsNumeric(n) Then
' Schreibe die Daten in die entsprechenden Zellen
sh.Range("B" & n).Value = "Mustermann"
Else
MsgBox "Zimmernummer nicht gefunden!"
End If
End Sub
Tipps für Profis
- Verwende
OptionButton anstelle von CheckBox, um die Auswahl zu vereinfachen.
- Berücksichtige, dass
Application.Match und Application.WorksheetFunction.Match unterschiedliche Fehlerbehandlungsmechanismen haben.
- Teste deine Funktionen in einer kontrollierten Umgebung, bevor du sie produktiv einsetzt.
FAQ: Häufige Fragen
1. Was ist der Unterschied zwischen Application.Match und Application.WorksheetFunction.Match?
Application.Match gibt einen Fehler zurück, wenn kein Treffer gefunden wird, während Application.WorksheetFunction.Match einen Laufzeitfehler generiert.
2. Wie kann ich sicherstellen, dass meine Suche case-sensitiv ist?
VBA bietet keine direkte Option für case-sensitive Suchen in Match. Du müsstest die Werte vor dem Vergleich in die gleiche Groß- oder Kleinschreibung umwandeln.
3. Was kann ich tun, wenn ich mit großen Datenmengen arbeite?
Erwäge die Verwendung von Arrays, um die Performance zu verbessern, oder verwende Application.Match in Kombination mit der Find-Methode, um die benötigten Werte effizient zu suchen.