ich habe folgendes Problem.
Dim tmp as Range
On Error Resume Next
set tmp = Worksheets(1).Cells.find (What:="irgendwas")
Nun will ich überprüfen ob tmp ein Range-Objekt enthält oder nicht (Nothing). Wie kann ich das anstellen?
Gruß
Chris
Sub SUCHEN()
Dim tmp As Range
Set tmp = Worksheets(1).Cells.Find(What:="irgendwas")
If Not tmp Is Nothing Then
MsgBox "Gefunden " & tmp.Address
Else
MsgBox "Nix gefunden"
End If
End Sub
Um zu prüfen, ob ein Range-Objekt in Excel VBA Nothing ist, kannst Du die folgende Methode verwenden:
Range.Set-Anweisung, um das Range-Objekt zu initialisieren (z.B. mit der Find-Methode).If-Anweisung, ob das Range-Objekt Nothing ist.Hier ist ein Beispiel für den Code:
Sub SUCHEN()
Dim tmp As Range
On Error Resume Next
Set tmp = Worksheets(1).Cells.Find(What:="irgendwas")
On Error GoTo 0
If Not tmp Is Nothing Then
MsgBox "Gefunden " & tmp.Address
Else
MsgBox "Nix gefunden"
End If
End Sub
In diesem Code wird tmp gesetzt, und anschließend wird geprüft, ob tmp ein gültiges Range-Objekt ist oder nicht.
Fehler: "Typen nicht kompatibel"
tmp als Range deklariert ist und dass die Find-Methode erfolgreich ist.Fehler: "Objektvariable oder With-Blockvariable nicht festgelegt"
Set-Anweisung korrekt verwendet hast und dass die Find-Methode nicht Nothing zurückgibt.Fehler: On Error Resume Next führt zu unerwartetem Verhalten
On Error GoTo 0, um den Fehlerbehandlungsmodus zu deaktivieren, sobald Du den Fehler abgefragt hast.Eine alternative Methode, um zu prüfen, ob ein Range-Objekt Nothing ist, wäre die Verwendung der IsNothing-Funktion, die jedoch nicht nativ in VBA existiert. Du könntest jedoch eine eigene Funktion erstellen:
Function IsNothing(rng As Range) As Boolean
IsNothing = rng Is Nothing
End Function
Dann kannst Du diese Funktion wie folgt verwenden:
If IsNothing(tmp) Then
MsgBox "Nix gefunden"
Else
MsgBox "Gefunden " & tmp.Address
End If
Hier sind einige Beispiele, wie Du auf Nothing prüfen kannst:
Überprüfung nach einer Suche:
Dim result As Range
Set result = Worksheets(1).Cells.Find("Suchbegriff")
If result Is Nothing Then
MsgBox "Der Suchbegriff wurde nicht gefunden."
End If
Überprüfung eines benutzerdefinierten Bereichs:
Dim customRange As Range
Set customRange = Worksheets(1).Range("A1:A10")
If customRange Is Nothing Then
MsgBox "Der Bereich ist leer."
End If
If Not ... Is Nothing Then, um sicherzustellen, dass Dein Range-Objekt gültig ist, bevor Du darauf zugreifst.On Error Resume Next mit Bedacht; es kann die Fehlersuche erschweren, wenn Du nicht genau weißt, wo der Fehler auftritt.Nothing. Überprüfe immer, ob das Objekt tatsächlich existiert.1. Wie kann ich überprüfen, ob ein Bereich leer ist?
Du kannst die Count-Eigenschaft verwenden:
If customRange.Cells.Count = 0 Then
MsgBox "Der Bereich ist leer."
End If
2. Was passiert, wenn ich Set tmp = Nothing verwende?
Das setzt die Variable tmp auf Nothing, was bedeutet, dass sie auf kein Objekt verweist. Dies ist nützlich, um sicherzustellen, dass eine Variable nicht mehr verwendet wird.