Informationen und Beispiele zum Thema MsgBox | |
---|---|
![]() |
MsgBox-Seite mit Beispielarbeitsmappe aufrufen |
Betrifft: AW: prüfung von Variable auf auf Null und Inhalt=null
von: 1713298.html
Betrifft: AW: prüfung von Variable auf auf Null und Inhalt=null
von: 1713316.html
Betrifft: AW: prüfung von Variable auf auf Null und Inhalt=null
von: 1713327.html
Betrifft: AW: prüfung von Variable auf auf Null und Inhalt=null
von: 1713326.html
Betrifft: AW: prüfung von Variable auf auf Null und Inhalt=null
von: 1713410.html
Betrifft: AW: prüfung von Variable auf auf Null und Inhalt=null
von: 1713446.html
Betrifft: AW: Offenstellen vergessen oWt
von: 1713447.html
Betrifft: AW: geschkossen weil keine AW kam oWt.
von: 1714142.html
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 (
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.
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
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) _
i>
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) _
i>
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
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
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
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.
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
Geschrieben am: 17.09.2019 11:58:20
...
Geschrieben am: oWt.
...
Beiträge aus dem Excel-Forum zum Thema "prüfung von Variable auf auf Null und Inhalt=null"