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

Fehlerbehandlung Application.Match

Forumthread: Fehlerbehandlung Application.Match

Fehlerbehandlung Application.Match
Rudi
Hallo
Ich verwende in meinem Coding die Application.Match-Funktion, um nachzusehen, ob gewünschte Werte in einem anderen Tabellenblatt vorhanden sind.
Das Problem ist es jetzt, den Code bei Auftreten eines Fehlers (= Nicht-Finden des entsprechenden Wertes) weiter laufen lassen zu können. Ich habe diverse Einträge in den Foren studiert, dort ist aber meistens die Rede von einer Fehlerausgabe mittels MsgBox oder dem Abbruch der Prozedur.
Genau dies möchte ich aber nicht. Wird ein entsprechender Wert nicht gefunden, soll einfach mit dem Programm weitergefahren werden.
Übrigens: der aufgetretene Fehler ist 1004: ...Match-Eigenschaft... nicht zugeordnet werden.
Wie schaffe ich das?
Danke für eure Unterstützung.
Gruss, Rudi
Anzeige
bin mir nicht sicher,...
24.06.2012 22:50:15
Matze,Matthias
Hallo Rudi,
meintest du sowas : Application.DisplayAlerts = False
VG Matze
AW: bin mir nicht sicher,...
24.06.2012 23:02:28
Rudi
Hallo Matze
Dumme Frage: Wo schreibe ich das hin? In der Prozedur selber geht's nicht...
Danke, Gruss
Rudi
On Error Resume Next am Anfang der Sub! orT
25.06.2012 01:02:24
Luc:-?
Gruß Luc :-?
Anzeige
AW: On Error Resume Next am Anfang der Sub! orT
25.06.2012 09:48:08
Rudi
Hallo Luc:-?
Danke für deinen Tipp. Habe ich schon probiert, hat aber nichts gebracht... Ich probier's nochmals, vielleicht hat's ja sonst noch einen Fehler.
Gruss,
Rudi
AW: Application.Match
25.06.2012 10:04:47
hary
Hallo Rudi
Schau Dir den Aufbau mal an.

Dim a As Variant
a = Application.Match("x", Sheets("Tabelle2").Range("A1:A6"), 0) ' sucht x im Bereich
If Not IsNumeric(a) Then 'wenn nicht vorhanden dann
MsgBox "nicht vorhanden" 'hier kommt dein Code hin
Else                     'sonst
MsgBox "vorhanden"
End If

gruss hary
Anzeige
AW: Application.Match
25.06.2012 21:25:54
Rudi
Hallo Hary
Vielen Dank, es funktioniert! Ich war ein Hornochse, habe das IsNumeric immer falsch interpretiert :-(
Gruss, Rudi
AW: Fehlerbehandlung Application.Match
25.06.2012 10:16:20
Peter
Hallo Rudi,
das NICHT Gefunden kannst Du doch über die Abfrage des Ergebnisses ermitteln:
Public Sub WertSuchen()
Dim SearchRange  As Range
Dim TestWert     As String
Dim myVar        As Variant
TestWert = Range("B1").Value
Set SearchRange = ThisWorkbook.Sheets("Tabelle1").Range("A1:A10")
myVar = Application.Match(TestWert, SearchRange, 0)
If IsError(myVar) Then
MsgBox "der gesuchte Wert " & TestWert & " wurde nicht gefunden!", _
64, "   den gesuchten Wert gibt es nicht."
Else
MsgBox "der gesuchte Wert " & TestWert & " wurde in Zeile " & myVar & _
" gefunden.", 48, "    der Wert wurde gefunden."
End If
End Sub
Gruß Peter
Anzeige
AW: Fehlerbehandlung Application.Match
25.06.2012 21:28:15
Rudi
Hallo Peter
Vielen Dank für deine Hilfe! Jetzt scheint's zu klappen!
Gruss, Rudi
besser mit CountIf
25.06.2012 11:29:22
Rudi
Hallo Rudi,
um nachzusehen, ob gewünschte Werte in einem anderen Tabellenblatt vorhanden sind.
Wenn du das mit Application.Countif machst, wird kein Fehler verursacht sondern das Ergebnis ist 0 falls nicht vorhanden.
Gruß
Rudi
Anzeige
Außerdem kann man das auch mit dem eigentl...
25.06.2012 15:28:44
Luc:-?
…dafür vorgesehenen Container WorksheetFunction (statt Application) machen, Rudi;
dabei bleibt der alte Inhalt einer Variablen (zB 0, -1 bzw Empty) erhalten, wenn man ihr das Ergebnis von WorksheetFunction.Match zuweist, weil Container-Fktt keine Fehlerwerte zurückgeben, sondern ggf höchstens einen Fehler auslösen, der mit On Error Resume Next übergangen wdn kann. Dann kann man allerdings nicht wie bei Application.Match den Fehler mit If IsError(…) Then abfragen, sondern muss fragen, ob der Wert der Variablen noch der Initialwert ist (der natürl entsprd eindeutig gewählt wdn muss). Da CountIf idR keinen Fehler, sondern (wie schon Rudi schrieb) 0 zurückgibt, ist hier die Vwendg von Application anstelle des Containers unnötig, zumal nur das Container-Objekt vom VBE-Intellisense unterstützt wird (Anzeige der Anzahl der mögl Argumente).
Gruß Luc :-?
Anzeige
Container
25.06.2012 22:58:52
Rudi
Hallo,
warum sollte ich den nutzen, wenn ich per Application.Function die Möglichkeit habe, die Rückgabe eines Fehlers zu prüfen, anstatt einen Fehler temporär zu ignorieren?
Gruß
Rudi
Intellisense, deshalb - falls benötigt, ...
26.06.2012 17:42:48
Luc:-?
…Rudi,
ansonsten ist Container-Verwendung kaum aufwendiger und die Rückgabe eines Fehlers ohne den nicht sonderl vorteilhafter, nur das wohl hier auf On Error Resume Next verzichtet wdn kann. Allerdings muss man evtl Fehler ohnehin stets auf irgendeine Weise abfangen.
Die Entscheidung für oder gg den Container ist natürl jedem selbst überlassen, wobei es durchaus sein könnte, dass Application… nur 'ne Hintertür von ihm ist, denn die Fktt, die nicht im Container sind, fktn wohl auch auf diese Weise nicht, wenn ich nicht irre.
Gruß Luc :-?
Anzeige
AW: Fehlerbehandlung Application.Match
25.06.2012 21:31:24
Rudi
Hallo Alle
Vielen herzlichen Dank für eure wertvollen Beiträge. Ich komme jetzt weiter!
Gruss, Rudi
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Fehlerbehandlung bei Application.Match in VBA Excel


Schritt-für-Schritt-Anleitung

Um die Fehlerbehandlung bei der Verwendung von Application.Match in VBA zu implementieren, folge diesen Schritten:

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.
  2. Erstelle eine neue Subroutine:

    • Füge eine neue Subroutine hinzu, in der du die Application.Match-Funktion verwenden möchtest.
  3. Implementiere die Fehlerbehandlung:

    • Nutze die On Error Resume Next-Anweisung, um den Fehler zu ignorieren, falls der gesuchte Wert nicht gefunden wird.
  4. Verwende IsError zur Fehlerüberprüfung:

    • Überprüfe, ob das Ergebnis von Application.Match ein Fehler ist.

Hier ist ein Beispielcode, den du verwenden kannst:

Sub FehlerbehandlungMatch()
    Dim myVar As Variant
    Dim TestWert As String
    TestWert = "Wert" ' Setze den Wert, den du suchen möchtest
    myVar = Application.Match(TestWert, Sheets("Tabelle1").Range("A1:A10"), 0)

    If IsError(myVar) Then
        MsgBox "Der gesuchte Wert " & TestWert & " wurde nicht gefunden!"
    Else
        MsgBox "Der gesuchte Wert " & TestWert & " wurde in Zeile " & myVar & " gefunden."
    End If
End Sub

Häufige Fehler und Lösungen

  1. Fehler 1004: Die Match-Eigenschaft kann nicht zugeordnet werden:

    • Lösung: Stelle sicher, dass der Suchbereich korrekt definiert ist und die Werte im Suchbereich den richtigen Datentyp haben.
  2. Die MsgBox wird trotz Fehler angezeigt:

    • Lösung: Überprüfe, ob On Error Resume Next korrekt platziert ist, bevor die Application.Match-Funktion aufgerufen wird.
  3. Das Ergebnis von Application.Match zeigt immer einen Fehler an:

    • Lösung: Vergewissere dich, dass der gesuchte Wert tatsächlich im Suchbereich vorhanden ist.

Alternative Methoden

Anstelle von Application.Match kannst du auch folgende Methoden verwenden:

  • WorksheetFunction.Match: Diese Methode kann ebenfalls verwendet werden, um nach einem Wert zu suchen, hat aber den Nachteil, dass sie einen Laufzeitfehler zurückgibt, wenn der Wert nicht gefunden wird. Du kannst sie in Kombination mit On Error Resume Next verwenden.
Sub WorksheetFunctionMatch()
    Dim myVar As Variant
    On Error Resume Next
    myVar = Application.WorksheetFunction.Match("Wert", Sheets("Tabelle1").Range("A1:A10"), 0)
    If IsError(myVar) Then
        MsgBox "Nicht gefunden"
    Else
        MsgBox "Gefunden in Zeile " & myVar
    End If
End Sub
  • Application.CountIf: Mit dieser Methode kannst du die Anzahl der Vorkommen eines Wertes zählen, ohne einen Fehler zu erzeugen.
Sub CountIfExample()
    Dim count As Long
    count = Application.WorksheetFunction.CountIf(Sheets("Tabelle1").Range("A1:A10"), "Wert")
    If count = 0 Then
        MsgBox "Wert nicht vorhanden"
    Else
        MsgBox "Wert vorhanden: " & count & " mal gefunden."
    End If
End Sub

Praktische Beispiele

Hier sind einige praktische Beispiele, wie du Application.Match und seine Fehlerbehandlung in verschiedenen Szenarien einsetzen kannst:

  • Beispiel zur Überprüfung von Benutzereingaben: Überprüfe, ob ein Benutzerwert in einer Liste vorhanden ist und informiere ihn über das Ergebnis.
Sub BenutzerwertÜberprüfung()
    Dim userInput As String
    Dim searchResult As Variant

    userInput = InputBox("Bitte einen Wert eingeben:")
    searchResult = Application.Match(userInput, Sheets("Tabelle1").Range("A1:A10"), 0)

    If IsError(searchResult) Then
        MsgBox "Der eingegebene Wert wurde nicht gefunden."
    Else
        MsgBox "Der Wert wurde gefunden in Zeile: " & searchResult
    End If
End Sub

Tipps für Profis

  • Verwendung von On Error Resume Next: Nutze diese Anweisung nur, wenn du genau weißt, wo Fehler auftreten können, um unerwartete Probleme zu vermeiden.
  • Variablen sinnvoll benennen: Benenne deine Variablen so, dass sie den Zweck klar widerspiegeln, z.B. searchResult für Ergebnisse von Application.Match.
  • Testfälle erstellen: Implementiere Testfälle, um sicherzustellen, dass dein Code auch bei unerwarteten Eingaben stabil bleibt.

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen Application.Match und WorksheetFunction.Match? Application.Match gibt einen Fehler zurück, wenn der Wert nicht gefunden wird, während WorksheetFunction.Match einen Laufzeitfehler auslöst. Daher ist die Fehlerbehandlung bei Application.Match oft einfacher zu handhaben.

2. Wie kann ich die Leistung meines Codes verbessern? Vermeide unnötige Berechnungen, indem du den Suchbereich so klein wie möglich hältst und nur die benötigten Daten lädst.

3. Kann ich Application.Match auch für mehrere Suchkriterien verwenden? Ja, du kannst mehrere Bedingungen kombinieren, indem du die Ergebnisse von Application.Match mit anderen Funktionen wie If oder And überprüfst.

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