Merkwürdiger, VBA Nothing
ist nicht die gleiche wie Unassigned
, Null
oder Empty
, so dass Sie nicht, zum Beispiel verwenden können:
// Worksheet is a TExcelWorksheet or OleVariant coupled to an open worksheet
MyRange := Worksheet.Range['MyRangeInTheWorksheet', EmptyParam]
if (MyRange = Null) then // won't work!
MsgBox('The range doesn''t exist!');
Stattdessen verwenden diese Funktion:
function VarIsNothing(V: OleVariant): Boolean;
begin
Result :=
(TVarData(V).VType = varDispatch)
and
(TVarData(V).VDispatch = nil);
end;
// ...
if (VarIsNothing(MyRange)) then
Aktualisieren
Anscheinend haben sich die Quellen der RTL-Einheit Variants.pas
zwischen Delphi 5 und 2007 geändert. Laut @mghie (siehe Kommentare) hätte die Funktion VarIsEmpty
die Aufgabe in D5 erledigt. In D2007 scheint dies jedoch nicht mehr der Fall zu sein, so dass Sie die obige Funktion wahrscheinlich erneut benötigen.
Beachten Sie auch, dass VBA Nothing
ist wahrscheinlich ein ganz besonderer Fall; Ich denke nicht, dass man es zu oft mit Automatisierung konfrontiert.
?! Du hast recht! Das habe ich komplett übersehen! Ich habe deine Antwort akzeptiert und werde meinen Quellcode ändern ;-) Vielen Dank! – onnodb