Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA: Application.Match

Forumthread: VBA: Application.Match

VBA: Application.Match
12.01.2020 15:01:30
Charly
Hallo
ich weiß nicht weiter.
Laufzeitfehler "13", Typen unverträglich
In der Zeile: n = Application.Match(VBA.CLng(UF4_Tab4_Ändern.CB_Zimmer.Value), sh.Range("A:A"), 0)
Sub Schreiben()
' Schreibe
Dim sh As Worksheet, n As Long
Set sh = ThisWorkbook.Sheets("Bewohner")
n = Application.Match(VBA.CLng(UF4_Tab4_Ändern.CB_Zimmer.Value), sh.Range("A:A"), 0)
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
Set sh = Nothing
End Sub
Habe in dieser Zeile lediglich die unten stehenden sachen angepast
- UF, ComboBox, sh.Range
Suchen od. Schreiben
es müssen zuvor ein Bereich u. eine Zi.-Nummer per Combobox ausgewählt werden.
Die Suche Funktioniert nur das Schreiben z.B. ("WB1" "Zi.-Nr. 0.01") will nicht.
Nutze den Code in andere Mappen um ins Tabellenblatt zu Schreiben, dort Fuhnktioniert er.
Hier eine Bsp.-Mappe
https://www.herber.de/bbs/user/134340.xlsm
Gruß Charly
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Application.Match
12.01.2020 15:13:31
Beverly
Hi Charliy,
der Fehler tritt auf, wenn der Suchbegriff nicht gefunden wird (z.B. wenn UF4_Tab4_Ändern.CB_Zimmer leer ist) - prüfe das also vorher:
Sub Schreiben()
' Schreibe
Dim sh As Worksheet, n As Variant
Set sh = ThisWorkbook.Sheets("Bewohner")
n = Application.Match(VBA.CLng(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


Anzeige
AW: VBA: Application.Match
12.01.2020 15:18:59
onur

VBA.CLng 

Was soll das denn deiner Meinung nach bedeuten ?
AW: VBA: Application.Match
12.01.2020 15:24:01
Werner
Hallo Charly,
wie Beverly schon geschrieben hat tritt der Fehler dann auf, wenn der "Suchbegriff" aus der Combobox in Spalte A nicht gefunden wird.
Und bei dir wird der Fehler immer auftreten, weil du immer nichts finden wirst.
Warum:
Du wandelst mit CLng(... den Inhalt der Combobox in eine Zahl um und die willst du in Spalte A suchen. Dort wirst du aber nichts finden, weil in Spalte A Text steht und keine Zahl.
Also:
n = Application.Match(UF4_Tab4_Ändern.CB_Zimmer.Value, sh.Range("A:A"), 0)
Zudem würde ich in der Userform OptionButton verwenden und keine CheckBoxen.
Bei OptionButton innerhalb eines Frames kann immer nur einer der OptionButton aktiv sein und du brauchst dich nicht per Code darum zu kümmern, dass der andere OptionButton abgewählt wird, das ist Standard und passiert automatisch. Bei Checkboxen müsstest du das extra programmieren.
Gruß Werner
Anzeige
AW: VBA: Application.Match
12.01.2020 16:10:46
Charly
Beverly u. Werner
Danke für eure Hilfe, es funktioniert jetzt.
Gruß Charly
Gerne u. Danke für die Rückmeldung. o.w.T.
12.01.2020 16:14:15
Werner
Danke für die Rückmeldung. o.T.
12.01.2020 17:40:52
Beverly


Anzeige
;

Forumthreads zu verwandten Themen

Anzeige

Infobox / Tutorial

Anwendung von Application.Match in VBA


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und gehe zu dem Arbeitsblatt, in dem du mit VBA arbeiten möchtest.

  2. Öffne den VBA-Editor mit ALT + F11.

  3. Erstelle ein neues Modul: Klicke mit der rechten Maustaste im Projekt-Explorer und wähle „Einfügen“ > „Modul“.

  4. 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
  5. 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

  1. 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)
  2. 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.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige