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

Forumthread: wennfehler...

wennfehler...
20.11.2017 13:47:18
Christian
Hallo Zusammen,
ich habe wirklich versucht, selbst eine Lösung zu finden, hänge aber schon länger fest. Wie bekomme ich denn den Wennfehler in den VBA-Code?
If IsError(WorksheetFunction.VLookup(UserForm7.ComboBox3.Value, Worksheets("Dropdowns Analyse").Range("T7:T1000"), 1, False)) Then
UserForm7.ComboBox3 = ""
UserForm7.ComboBox3.BackColor = vbWhite
UserForm7.ComboBox3.Locked = False
Exit Sub
End If
If WorksheetFunction.VLookup(UserForm7.ComboBox3.Value, Worksheets("Dropdowns Analyse").Range("T7:T1000"), 1, False) = UserForm7.ComboBox3.Value Then
UserForm7.ComboBox3.BackColor = vbWhite
UserForm7.ComboBox3.Locked = False
End If
Vielen Dank und viele Grüße
Christian
Anzeige

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
WorksheetFunction.IsError
20.11.2017 14:03:24
lupo1
AW: WorksheetFunction.IsError
20.11.2017 14:17:04
Christian
Mmh... so ist das sicher zu kurz gedacht, oder?
If WorksheetFunction.IsError(WorksheetFunction.VLookup(UserForm7.ComboBox3.Value, Worksheets("Dropdowns Analyse").Range("T7:T1000"), 2, False)) = True Then
In VBA ist .FIND die bessere Alternativ zu VLookUP
20.11.2017 14:29:28
Daniel
Hi
in VBA ist es oft besser, .FIND anstelle von Worksheetfunction.VLookUp zu verwenden (vorallem, wenn du nur feststellen willst, ob der Wert überhaupt vorhanden ist)
If Worksheets("Dropdowns Analyse").Range("T7:T1000").Find(What:=UserForm7.ComboBox3.Value, Lookat:=xlwhole) Is Nothing then
UserForm7.ComboBox3 = ""
UserForm7.ComboBox3.BackColor = vbWhite
UserForm7.ComboBox3.Locked = False
Exit Sub
End If

In VBA verwende ich den VLookUp nur in der Variante mit dem 4. Parameter = TRUE, weil er dann eine schnellere Suchmethode verwendet.
Oder du verwendest nicht WorkSheetfunction.VLookUp, sondern WorksheetFunction.CountIf.
das ergibt bei nichtvorhanden sein des Suchbegriffs keinen Fehler, sondern den Wert 0, was in VBA auch einfacher zu händeln ist.
solltest du beim VLookUp bleiben wollen, dann vielleicht so, beachte dass du hier dann nicht Worksheetfunction.VLookUp verwenden musst, sondern ApplicationVLookUp:
IF VarType(Application.VLookUP(...)) = vbError Then
Gruß Daniel
Anzeige
AW: In VBA ist .FIND die bessere Alternativ zu VLookUP
20.11.2017 14:37:47
Christian
Hallo Daniel,
vielen Dank - auch wieder für die hilfreichen Erklärungen.
Leider übernimmt er
UserForm7.ComboBox3 = ""
obwohl das Wort "Gesamt" in den Spalte T wiederzufinden ist.
Liegt es möglicherweise daran, dass in der Spalte T keine Werte sondern Formeln stehen?
Viele Grüße
Christian
Anzeige
AW: In VBA ist .FIND die bessere Alternativ zu VLookUP
20.11.2017 14:46:49
Daniel
Hi
kommt darauf an.
bei .FIND hast du die Option, in Formeln oder in Werten zu suchen.
Dh, du solltest im Parameter LookIn:=xlValues dieses noch angeben.
Lässt du diese Angabe weg, so verwenden die .Find-Funktion die Einstellung, die du beim letzten mal gemacht hast.
Daher sollte man bei .Find die Parameter möglichst vollständig angeben (die weitern Parameter kannst du in der Hilfe nachlesen):
Range(..).Find(what:=..., lookIn:=xlvalues, lookat:=xlwhole, MatchCase:=False)
Gruß Daniel
Anzeige
AW: In VBA ist .FIND die bessere Alternativ zu VLookUP
20.11.2017 15:01:47
Christian
Hallo nochmal, sorry,
jetzt findet er "angeblich" immer einen Wert.
Seltsamerweise schreibt er, sofern der Wert eigentlich nicht in der Spalte zu finden ist, die oberste Zelle aus T7:T1000 in die COmbobox... ich habe extra eine Messagebox eingebaut,um mitzubekommen, wo er abzweigt:
If Worksheets("Dropdowns Analyse").Range("T7:T1000").Find(What:=UserForm7.ComboBox3.Value, LookIn:=xlValues, Lookat:=xlWhole, MatchCase:=False) Is Nothing Then
UserForm7.ComboBox3 = ""
UserForm7.ComboBox3.BackColor = vbWhite
UserForm7.ComboBox3.Locked = False
Else
MsgBox "!"
UserForm7.ComboBox3 = UserForm7.ComboBox3
UserForm7.ComboBox3.BackColor = vbWhite
UserForm7.ComboBox3.Locked = False
End If
Anzeige
AW: In VBA ist .FIND die bessere Alternativ zu VLookUP
20.11.2017 15:09:24
Daniel
Hi
ohne die Datei kann ich dir da auch nicht helfen.
btw: welchen tieferen Sinn hat dieser Befehl?
UserForm7.ComboBox3 = UserForm7.ComboBox3
Gruß Daniel
AW: In VBA ist .FIND die bessere Alternativ zu VLookUP
20.11.2017 15:13:53
Christian
...keinen, habe ich schon gelöscht.
Dann muss ich mir etwas anderes einfallen lassen - trotzdem danke.
Etwas anderes, wenn ich die UserForm7 mit vbModeless aufgerufen habe - wie kann ich verhindern, dass der User andere Tabellenblätter ansteuert. Das Tabellenblatt der UserForm soll allerdings mit bearbeitbar bleiben. Geht das?!
Anzeige
AW: In VBA ist .FIND die bessere Alternativ zu VLookUP
20.11.2017 15:22:26
Daniel
Nun, du musst nicht .FIND verwenden, ich habe dir ja noch andere alternativen genannt.
zur zweiten Frage:
blende die Blätter einfach aus.
Wenn der Anwender die Blätter wieder bearbeiten darf, blende sie wieder ein.
Gruß Daniel
AW: In VBA ist .FIND die bessere Alternativ zu VLookUP
20.11.2017 15:23:16
Christian
gute Idee... vielen vielen Dank!
AW: In VBA ist .FIND die bessere Alternativ zu VLookUP
20.11.2017 16:28:15
Christian
Hallo nochmal,
ich glaube, ich habe herausgefunden, woran es liegt.
In der Zelle T8 steht zum Beispiel eine Formel, die das Ergebnis "Gesamt" auswirft.
Durch die Eingabe in der ComboBox 2 verändert sich das Ergebnis der Formel in T8 in "Einzelsicht" - daraufhin verändert sich der Inhalt der Combobox3 auch in Einzelsicht.
Kann man da etwas machen?
Anzeige
AW: In VBA ist .FIND die bessere Alternativ zu VLookUP
20.11.2017 16:40:06
Daniel
Selber nachdenken, was du genau willst und welche Werte zu welchem Zeitpunkt aus den Daten genommen werden müssen. Ggf auch die Werte in Variablen zwischenspeichern, wenn sich die Originalquellen verändern, bis der Wert eingesetzt wird.
Ohne die Kenntnis der Originaldatei und der Aufgabenstellung kann ich dir keine genauere Aussage zu machen.
Anzeige
AW: In VBA ist .FIND die bessere Alternativ zu VLookUP
21.11.2017 07:17:09
Christian
Hallo Daniel,
herzlichen Dank für Deine geduldige Mühe.
Viele Grüße
Christian
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

Umgang mit Wennfehler in VBA für Excel


Schritt-für-Schritt-Anleitung

Um den Wennfehler in deinen VBA-Code zu integrieren, kannst du die IsError-Funktion verwenden. Hier ist eine Schritt-für-Schritt-Anleitung, wie du das umsetzen kannst:

  1. Öffne den VBA-Editor in Excel (Alt + F11).
  2. Füge ein neues Modul hinzu oder öffne ein bestehendes.
  3. Verwende den folgenden Code, um die VLookup-Funktion abzusichern:
If IsError(WorksheetFunction.VLookup(UserForm7.ComboBox3.Value, Worksheets("Dropdowns Analyse").Range("T7:T1000"), 1, False)) Then
    UserForm7.ComboBox3 = ""
    UserForm7.ComboBox3.BackColor = vbWhite
    UserForm7.ComboBox3.Locked = False
    Exit Sub
End If
  1. Alternativ kannst du die Application.VLookup-Methode verwenden, um den Fehler abzufangen:
If VarType(Application.VLookup(UserForm7.ComboBox3.Value, Worksheets("Dropdowns Analyse").Range("T7:T1000"), 1, False)) = vbError Then
    UserForm7.ComboBox3 = ""
    UserForm7.ComboBox3.BackColor = vbWhite
    UserForm7.ComboBox3.Locked = False
    Exit Sub
End If

Häufige Fehler und Lösungen

  1. Fehler: ComboBox zeigt falsche Werte an

    • Stelle sicher, dass die Daten in der verwendeten Range korrekt sind. Wenn die Zellen Formeln enthalten, könnten die Ergebnisse variieren. Verwende LookIn:=xlValues in der Find-Methode, um sicherzustellen, dass die Werte in den Zellen berücksichtigt werden.
  2. Fehler: VLookup gibt unerwartete Ergebnisse zurück

    • Überprüfe, ob die Suchwerte in der richtigen Form vorliegen. Achte darauf, dass es keine führenden oder nachfolgenden Leerzeichen gibt.
  3. Fehler: Anwendung stürzt ab

    • Stelle sicher, dass die Range, die du verwendest, korrekt definiert ist und dass keine Nullreferenzen auftreten.

Alternative Methoden

Anstelle der VLookup-Funktion gibt es verschiedene alternative Methoden, die du in VBA verwenden kannst:

  • Die Find-Methode: Diese Methode ist oft schneller und flexibler. Hier ein Beispiel:
If Worksheets("Dropdowns Analyse").Range("T7:T1000").Find(What:=UserForm7.ComboBox3.Value, LookIn:=xlValues, LookAt:=xlWhole) Is Nothing Then
    UserForm7.ComboBox3 = ""
Else
    MsgBox "Wert gefunden!"
End If
  • Die CountIf-Funktion: Anstatt VLookup zu verwenden, kannst du auch CountIf nutzen, um zu prüfen, ob ein Wert vorhanden ist, ohne dass ein Fehler auftritt.
If WorksheetFunction.CountIf(Worksheets("Dropdowns Analyse").Range("T7:T1000"), UserForm7.ComboBox3.Value) = 0 Then
    UserForm7.ComboBox3 = ""
End If

Praktische Beispiele

Hier sind einige praktische Beispiele, wie du die oben genannten Methoden anwenden kannst:

  1. VLookup mit Fehlerbehandlung:

    Sub CheckComboBox()
    If IsError(Application.VLookup(UserForm7.ComboBox3.Value, Worksheets("Dropdowns Analyse").Range("T7:T1000"), 1, False)) Then
        UserForm7.ComboBox3 = ""
    End If
    End Sub
  2. Find-Methode:

    Sub FindValue()
    Dim rng As Range
    Set rng = Worksheets("Dropdowns Analyse").Range("T7:T1000").Find(UserForm7.ComboBox3.Value, LookIn:=xlValues, LookAt:=xlWhole)
    If rng Is Nothing Then
        UserForm7.ComboBox3 = ""
    Else
        MsgBox "Wert gefunden: " & rng.Value
    End If
    End Sub

Tipps für Profis

  • Verwende die With-Anweisung, um deinen Code lesbarer und effizienter zu gestalten:
With UserForm7.ComboBox3
    .BackColor = vbWhite
    .Locked = False
End With
  • Denke daran, die Werte zwischenzuspeichern, wenn sie sich dynamisch ändern, um unerwartete Fehler zu vermeiden.

FAQ: Häufige Fragen

1. Wie kann ich einen Fehler mit der Wennfehler-Funktion vermeiden? Verwende die IsError-Funktion oder die Application.VLookup-Methode, um Fehler abzufangen.

2. Was ist der Unterschied zwischen VLookup und Find? VLookup sucht in einer bestimmten Spalte, während Find flexibler ist und in einem Bereich nach einem Wert suchen kann, unabhängig von der Spalte.

3. Kann ich auch CountIf verwenden? Ja, CountIf ist eine gute Alternative, um zu prüfen, ob ein Wert vorhanden ist, ohne dass ein Fehler ausgelöst wird.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige