Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

prüfung von Variable auf auf Null und Inhalt=null


Betrifft: prüfung von Variable auf auf Null und Inhalt=null von: ingo
Geschrieben am: 16.09.2019 12:21:02

Hallo,

ich stecke bei einem trivalen Problem in anderen Programmiersprachen fest:

und zwar möchte ich
1. das objekt prüfen ob ein gültiges object zugewiesen wurde und nicht nicht nothing , null oder empty
2. prüfe ob der inhalt eines gültigen objektes leer ist.
3.
a) if 1. oder 2. erfüllt ist entweder eine standardinitialisierung durchführen oder fehlermeldung oder ähnliches ausgeben
b) ost es ein gültiges objekt die funktion mit machwas () aufrufen

also in c/c++ würde ich das wie folgt machen:

if (meinObjekt==NULL && meinobjekt.text=="") 
        {
        Fehlemeldung(ErrorMessage_invalid_InputPraram)
        
        }
        else
        {
        machwas(meinObjekt)
        }
        

hier in VBA bin ich damit total überfordert.

1.bei explizierter verwendung von einem String geht es nicht
dim meinObjekt as String

keine zuweisung an null, nothing oder empty möglich
anscheinend wird string ander als andere objekte gehandhabt.

2. bei verwendung von Variant oder nichtklariertem Objekt kann ich zwar nothing und zeichenketten zuweisen anber entwederauf Nothing prüfen oder auf den inhalt prüfen, es gibt immer bei der jeweils anderen alternative einen Fehler

z.B.:
'hier funktioniert alles
        Set testObj1 = Nothing
        
        if testObj1 Is Nothing then 
         ' fehler
        else
         ' allesok 
        end if
        

'hier funktioniert es nicht (Laufzeitfehler 424: objekt erforderlich
        Set testObj1 = Nothing
        testObj1 = "test1"
        
        if testObj1 Is Nothing then 
         ' fehler
        else
         ' alles ok 
        end if
        
        'prüfung auf Inhalt mit ="xyz", ="",<>""od is Null,... schitern dann wenn die Vraiable Nothing ist.
Kann mir bitte jemand erkären wie man beide Fälle abfängt und zwar wie das generell bei objekten od string objekten zu tun ist, da sich diese anders verhalten als andere objekte wie range,workbook,...

Ich habe hier leider noch keine Lösung im froum gefunden, daher der Post.

Vielen dank für jeden der sich meins Problems annimmt.
  

Betrifft: AW: prüfung von Variable auf auf Null und Inhalt=null von: 1713298.html
Geschrieben am: 16.09.2019 13:41:13

Hallo Ingo

du hast in deiner Anfrage die Lösung vorgegeben, siehst sie aber offenbar nicht! Schau bitte hier:
testObj1 = "test1" - Da gibst du einen Text an, das ist aber KEIN OBJEKT wie: - Shapes("Rechteck 1") o.a.

Unterscheide auch bitte eindeutig zwischen einer SET Anweisung und einer normalen Variablen wie: - testObj1 = "test1"

Die Prüfung von Set Anweisung ist mit Nothing oder Not Nothing, ganz anders bei Variablen!
Da kannst du Text, Zahlen oder Datum zuweisen, wo du den Wert mit = Emopty prüfen kannst.
Ich hoffe das hilft dir weiter jetzt selbst korrekte Prüfungen einzubauen.

mfg Piet

  

Betrifft: AW: prüfung von Variable auf auf Null und Inhalt=null von: 1713316.html
Geschrieben am: 16.09.2019 14:41:20

hab die Antwort nicht ganz verstanden, habe aber folgendes raus gefunden.

Bei Strings scheint das wie folgt zu funktionieren , falls das eine schlechte Implementierung oder sogar falsch ist, bitte korrigieren:

Auch für Verbesserungsvorschläge bin ich dankbar.

        
         Dim UniqueKey As String
         UniqueKey = ""
         
         UniqueKey = getValidUniqueID(strURL1)
         ' hier wird eine Leerstring zurückgegeben
 
         
         If UniqueKey = "" Then
                         MsgBox ("string  mit Inhalt: " &strURL1 "hat keinen Inhalt)
         Else
                         MsgBox ("string  mit Inhalt: " &strURL1 "hat keinen Inhalt)
         End If
         
         UniqueKey = getValidUniqueID(strURL2)
         ' hier wird ein gültiger UNIqey generiert 
 
         
         If UniqueKey = "" Then
                         MsgBox ("string  mit Inhalt: " &strURL2 "hat keinen Inhalt)
         Else
                         MsgBox ("string  mit Inhalt: " &strURL2 "hat keinen Inhalt)
         End If
 
Bei Objekten so:
hier zuweisung von nnothing (kein gültiges Objekt)
 Dim tmpRange As Range
 
 Set tmpRange = Nothing
 
 
 If tmpRange Is Nothing Then
     MsgBox (" kein gültiger Range gefunden")
 Else
     MsgBox (" gültiger Range gefunden")
     ' weiter Prüfungen
 End If
 

hier zuweisung von gültiges Range-Objekt
Set tmpRange = ActiveWorkbook.Worksheets("Tab_Input_2").Range("Tab_Input_2!A16:A200")
 
 If tmpRange Is Nothing Then
     MsgBox (" kein gültiger Range gefunden")
 Else
     MsgBox (" gültiger Range gefunden")
     ' weiter Prüfungen
 End If
 

  

Betrifft: AW: prüfung von Variable auf auf Null und Inhalt=null von: 1713327.html
Geschrieben am: 16.09.2019 15:17:51

Hallo Ingo

ich gebe dir mal den Code so zurück, so wie ich ihn aufbauen würde. "UniqueKey" 1+2 lade ich mir direkt nacheinander in zwei Variable zum prüfen!

Setzt du UniqueKey1 = "" brauchst du nicht mehr mit IF Then zu prüfen ob diese Variable leer ist! Die ist ja schon leer!
Bei Dim tmpRange As Range ist danach - Set tmpRange = Nothing - Überflüssig weil durch Dim auf Nothing gesetzt!
Bei Set tmpRange = ActiveWorkbook.Worksheets("Tab_Input_2").Range("A16:A200") - ist "Tab_Input_2" in Range überflüssig!

Was genau willst du da prüfen? Ob das Blatt vorhanden ist?? - Denn der Range Bereich im Worksheet ist doch IMMER vorhanden!
Oder willst du prüfen ob der Range Bereich leer ist??? - Dann nimm bitte die WorksheetFunktion mit CountA. Google mal danach.

mfg Piet

Dim UniqueKey1 As String
Dim UniqueKey2 As String
    
    UniqueKey1 = getValidUniqueID(strURL1)
    ' hier wird eine Leerstring zurückgegeben
    UniqueKey2 = getValidUniqueID(strURL2)
    ' hier wird ein gültiger UNIqey generiert
        
    If UniqueKey1 = "" Then MsgBox strURL1 & " 'strURL1' hat keinen Inhalt"
    If UniqueKey2 = "" Then MsgBox strURL2 & " 'strURL2' hat keinen Inhalt"

'Bei Objekten so:
'hier zuweisung von nnothing (kein gültiges Objekt)
Dim tmpRange As Range
Set tmpRange = Nothing    'Überflüssig nach Dim!!

'**  Überflüssig, wenn du tmpRange vorher auf Nothing setzt!!
If tmpRange Is Nothing Then
    MsgBox (" kein gültiger Range gefunden")
Else
    MsgBox (" gültiger Range gefunden")
    ' weiter Prüfungen
End If

'hier zuweisung von gültiges Range-Objekt
'**  ActiveWorkbook oder THISWorkbook ???  Grosser Unterschied bei 2 göffneten Dateien
Set tmpRange = ActiveWorkbook.Worksheets("Tab_Input_2").Range("A16:A200")

If tmpRange Is Nothing Then
    MsgBox (" kein gültiger Range gefunden")
Else
    MsgBox (" gültiger Range gefunden")
    ' weiter Prüfungen
End If

  

Betrifft: AW: prüfung von Variable auf auf Null und Inhalt=null von: 1713326.html
Geschrieben am: 16.09.2019 15:13:01

Mit dem Set hast Du ein Object angelegt = nothing
Mit der Zuweisung hast Du aus dem Object eine String-Variable gemacht.
Eine String-Variable kann man nicht auf nothing abfragen

Warum fragst Du nicht einfach auf : if testObj1 = ""
Dann bekommst Du keinen Fehler.
Oder musst Du zwischen Oject und Variable unterscheiden?

Dann:

Function TT1(var)
On Error GoTo ErrorHandler
If var Is Nothing Then
    TT1 = "kein Object"
Else
    TT1 = "Object"
End If

ErrorHandler:
    If Err.Number <> 0 Then
        TT1 = "Variable"
    End If

End Function

  

Betrifft: AW: prüfung von Variable auf auf Null und Inhalt=null von: 1713410.html
Geschrieben am: 17.09.2019 09:46:31

Also vorab ich komme aus der Programmierung hauptsächlich C/C++, also eine Sprache die explizite Deklaration und Verwendung von passenden Datentypen verlangt, ist das nicht erfüllt bekommt man Fehlermeldungen dann muss man in Eigenverantwortung in den Zieldatentyp casten.

Bitte die anderen beiden Threadzweige ignorieren.
Prinzipiell hat mir Piet mir schon mein Vorgehen bestätigt.
https://www.herber.de/forum/messages/1713327.html
Aber trotzdem hat er mir Fragen gestellt, was ich denn genau prüfen will.

Also von daher nochmal es geht mit um die Prüfung Rückgabewerte aus Funktionen, daher ist kann auch auch bei einem Range-Objekt nothing zurückgleifert werden wenn die Funktion keinen passende Rangebereich findet.
Es geht mir also um die generell sichere Prüfung der gültigen Rückgabewerte.

Ich liste mal die mir bekannten Möglichkeiten auf, sollte ich dabei irgendwas nicht bedacht haben bitte ich denjenigen um Korrektur bzw. Ergänzung.

native Datentypen wie integer oder double
- nur rückgabetyp des entsprechende wertebereichs möglich, daher kann hier der Inhalt direkt geprüft bzw. weiter verarbeitet werden


String:
-Leerstring ("")
-gültige zeichenkette (z.B. ""xyz)

irgendein Objekt(z.B. Range-Objekt)
-Nothing
-Referenz auf gültiges RangeObjekt

nicht deklarierte Variable ohne dim (Typ Variant wenn ich richtig liege):
-Nothing
-Null
-Empty
- Inhalt aller verfügbaren Datentypen
- Referenz auf gültiges beliebiges Objekt

Ich hoffe dass prüfung auf nothing und wenn nicht nothing ausreichend ist.
Also hier weiß ich nicht ob ich da korrekt vorgehe und das ausreichend ist, meistens ergänze ich zeitnah um die entsprechende dim-anweisung.

Also nur das mit den undeklarierten Datentypen ist noch offen das andere ist mir durch Antwortpost in ähnlicher Weise schon bestättigt worden, außer bei den möglichen Rückgabentypen von String und Objekten fehlen doch noch Fällen.

  

Betrifft: AW: prüfung von Variable auf auf Null und Inhalt=null von: 1713446.html
Geschrieben am: 17.09.2019 11:57:26

Hallo Ingo

ist von dir auch der Thread: - Spalte in andere Dateien kopieren + zurückkopieren ??
Da gibt es eine neue Beispieldatei, habe sie gerade hochgeladen.

mfg Piet

  

Betrifft: AW: Offenstellen vergessen oWt von: 1713447.html
Geschrieben am: 17.09.2019 11:58:20

...

  

Betrifft: AW: geschkossen weil keine AW kam oWt. von: 1714142.html
Geschrieben am: oWt.

...

Beiträge aus dem Excel-Forum zum Thema "prüfung von Variable auf auf Null und Inhalt=null"