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

Forumthread: Match-Fehler abfangen

Match-Fehler abfangen
Eddi
Hallo zusammen,
ich habe über VBA eine Match-Funktion erstellt, die mir in einem Sheet die erste Zeile nach einem bestimmten Benutzernamen durchsuchen soll. Wenn nichts gefunden wurde bekomm ich derzeit eine Fehlermeldung und das Programm stürzt ab. Wie kann ich das umgehen? Noch zur Info, wenn nichts gefunden wurde, soll in der Zelle rechts nebem dem letzten Eintrag der aktuelle Benutzer eingetragen werden. Die Variable UserNr gibt mir normalerweise die Spalte zurück mit der ich dann weiterarbeite.
Dim UserNr as Integer
Dim User as String
User = "Mustermann"
UserNr = Application.WorksheetFunction.Match(user, Sheets("User").Range("A1:Z1"), 0)
.....
Vielen Dank für Eure Hilfe
Eddi
Anzeige

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

Betreff
Benutzer
Anzeige
AW: Match-Fehler abfangen
11.05.2011 00:12:45
hary
Moin Eddi
als Ansatz.

Dim UserNr As Integer
Dim User As String
On Error GoTo nix
User = "Mustermann"
UserNr = Application.WorksheetFunction.Match(User, Sheets("User").Range("A1:Z1"), 0)
MsgBox UserNr
nix:
Sheets("User").Cells(1, Cells(1, Columns.Count).End(xlToLeft).Column + 1) = Environ("Username")
gruss hary

Anzeige
AW: besser mit find
11.05.2011 00:28:21
hary
Hallo
Mit find geht's ohne Fehlerbehandlung.

Dim zelle As Range
Dim UserNr As Integer
Dim User As String
User = "Mustermann"
Set zelle = Worksheets("User").Range("A1:Z1").Find(What:=User, LookIn:=xlValues, lookat:= _
xlWhole)
If Not zelle Is Nothing Then
UserNr = zelle.Column
Else
Sheets("User").Cells(1, Cells(1, Columns.Count).End(xlToLeft).Column + 1) = Environ("Username" _
)
End If
Set zelle = Nothing

gruss hary
Anzeige
AW: besser mit find
11.05.2011 00:37:48
Eddi
Super, vielen Dank.
MfG
besser mit Mach
11.05.2011 08:39:41
Erich
Hi zusammen,
auch mit Match gehts ohne Fehlerbehandlung:

Sub aaaTest()
Dim strUser As String
Dim varZ As Variant, lngC As Long ' besser als Integer
strUser = "Mustermann"
With Sheets("User")
varZ = Application.WorksheetFunction.Match(strUser, .Range("A1:Z1"), 0)
MsgBox varZ
If Not IsNumeric(varZ) Then
lngC = .Cells(1, .Columns.Count).End(xlToLeft).Column + 1
.Cells(1, lngC) = Environ("Username")
End If
End With
End Sub
Noch eine Bemerkung zur Referenzierung: In der Zeile
Sheets("User").Cells(1, Cells(1, Columns.Count).End(xlToLeft).Column + 1) = Environ(
beziehen sich Cells und Columns.Count in "Cells(1, Columns.Count)" auf das gerade aktive Blatt.
Sheets("User") steht zwar am Anfang der Zeile, bezieht sich aber nur auf das 1. Cells.
Da ist ein With meist sehr praktisch.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
besser mit Application.Match - Korrektur
11.05.2011 09:03:16
Erich
Hi zusammen,
wie Rudi schon schrieb: Besser ohne WorksheetFunction, also mit
varZ = Application.Match(strUser, .Range("A1:Z1"), 0)
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW:@ Erich
11.05.2011 10:48:38
hary
Moin Erich
ja, hast Recht. Hatte zwei Codes, auch einmal mit with. Dann zwischendurch was anderes probiert und falschen Code gepostet
Leicht uebermuedet .
sry gruss hayr
Anzeige
Application.Match
11.05.2011 08:56:57
Rudi
Hallo,
am besten ohne Worksheetfunction
Dim UserNr as Variant
Dim User as String
User = "Mustermann"
UserNr = Application.Match(user, Sheets("User").Range("A1:Z1"), 0)
If Not IsError(UserNr) Then
End If

Gruß
Rudi
AW: Application.Match
11.05.2011 22:41:11
Eddi
Warum eigentlich ohne WorksheetFunktion? Gibt's da irgendein Unterschied?
Gruß, Eddi
Anzeige
AW: Unterschied
12.05.2011 11:40:22
Rudi
Hallo,
ja, den gibt es.
x=Worksheetfunction.Match(...) ergibt einen Laufzeitfehler 1004, wenn der Suchbegriff nicht gefunden wird (Die Match-Eigenschaft des Worksheetfunction-Objekts kann nicht zugewiesen werden). Das kannst du nur mit On Error abfangen.
x=Application.Match(...) hingegen weist x den Fehlerwert (Fehler 2042) zu. Das kannst du dann abfragen.
If IsError(x) Then ...
Dito für VLOOKUP, HLOOKUP,..
Gruß
Rudi
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Match-Fehler in Excel VBA abfangen


Schritt-für-Schritt-Anleitung

Um einen Match-Fehler in Excel VBA abzufangen, kannst Du folgende Schritte befolgen:

  1. Definiere die Variablen:

    Dim UserNr As Variant
    Dim User As String
    User = "Mustermann"
  2. Verwende die Application.Match Methode:

    UserNr = Application.Match(User, Sheets("User").Range("A1:Z1"), 0)
  3. Fehlerbehandlung einfügen:

    If Not IsError(UserNr) Then
       MsgBox UserNr
    Else
       Sheets("User").Cells(1, Cells(1, Columns.Count).End(xlToLeft).Column + 1) = Environ("Username")
    End If
  4. Schlussfolgerung: Jetzt wird, wenn der Benutzername nicht gefunden wird, der aktuelle Benutzer in die Zelle rechts vom letzten Eintrag eingetragen.


Häufige Fehler und Lösungen

  • Fehler 2042: Dies tritt auf, wenn die Match-Funktion keinen Wert findet. Um diesen Fehler zu vermeiden, verwende die IsError-Funktion, wie im obigen Beispiel gezeigt.

  • Laufzeitfehler 1004: Dieser Fehler kann auftreten, wenn Du die WorksheetFunction.Match verwendest und der Suchbegriff nicht gefunden wird. Nutze stattdessen Application.Match, um diesen Laufzeitfehler zu vermeiden.


Alternative Methoden

  • Verwendung von Find: Eine alternative Methode zur Match-Funktion ist die Find-Funktion. Diese Methode funktioniert ohne Fehlerbehandlung:
    Dim zelle As Range
    Set zelle = Worksheets("User").Range("A1:Z1").Find(What:=User, LookIn:=xlValues, lookat:=xlWhole)
    If Not zelle Is Nothing Then
       UserNr = zelle.Column
    Else
       Sheets("User").Cells(1, Cells(1, Columns.Count).End(xlToLeft).Column + 1) = Environ("Username")
    End If

Praktische Beispiele

Hier sind einige praktische Beispiele für die Verwendung der Match-Funktion in Excel VBA:

  1. Einfaches Beispiel:

    Sub BeispielMatch()
       Dim UserNr As Variant
       Dim User As String
       User = "Mustermann"
       UserNr = Application.Match(User, Sheets("User").Range("A1:Z1"), 0)
    
       If Not IsError(UserNr) Then
           MsgBox "Benutzer gefunden in Spalte: " & UserNr
       Else
           MsgBox "Benutzer nicht gefunden."
       End If
    End Sub
  2. Mit Fehlerbehandlung:

    Sub BeispielMitFehlerbehandlung()
       Dim UserNr As Variant
       Dim User As String
       User = "Mustermann"
    
       On Error Resume Next
       UserNr = Application.WorksheetFunction.Match(User, Sheets("User").Range("A1:Z1"), 0)
       On Error GoTo 0
    
       If IsError(UserNr) Then
           MsgBox "Benutzer wurde nicht gefunden. Fehler 2042."
       End If
    End Sub

Tipps für Profis

  • Verwende Application.Match statt WorksheetFunction.Match, um Laufzeitfehler zu vermeiden und um den Fehlerwert 2042 abzufangen.

  • Nutze Option Explicit am Anfang Deiner Module, um sicherzustellen, dass Du alle Variablen deklarierst. Dies hilft, Fehler frühzeitig zu erkennen.

  • Verwende With-Anweisungen, um den Code lesbarer zu gestalten und redundante Verweise zu vermeiden:

    With Sheets("User")
       ' Dein Code hier
    End With

FAQ: Häufige Fragen

1. Warum sollte ich Application.Match anstelle von WorksheetFunction.Match verwenden?
Application.Match gibt im Fehlerfall den Fehlerwert 2042 zurück, während WorksheetFunction.Match einen Laufzeitfehler 1004 verursacht. Dies ermöglicht eine einfachere Fehlerbehandlung.

2. Was bedeutet Fehler 2042 in Excel VBA?
Fehler 2042 tritt auf, wenn ein Wert nicht gefunden wird, und ist das Ergebnis der Match-Funktion. Um diesen Fehler zu behandeln, kannst Du die IsError-Funktion verwenden.

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