Любопытно, что Nothing
в VBA не совпадает с Unassigned
, Null
или Empty
, поэтому вы не можете использовать, например ::100100
// 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!');
Вместо этого используйте эту функцию:
function VarIsNothing(V: OleVariant): Boolean;
begin
Result :=
(TVarData(V).VType = varDispatch)
and
(TVarData(V).VDispatch = nil);
end;
// ...
if (VarIsNothing(MyRange)) then
Обновление
Очевидно, что источники RTL-блока Variants.pas
изменились между Delphi 5 и 2007. Согласно @mghie (см. Комментарии), функция VarIsEmpty
выполнила бы работу в D5. Однако в D2007 это, похоже, уже не так, поэтому вам, вероятно, снова понадобится вышеуказанная функция.
Кроме того, обратите внимание, что VBA Nothing
, вероятно, представляет собой особый случай; Я не думаю, что с автоматизацией сталкиваются слишком часто.