Ответов (3)3
VarIsClear
Функция включает в себя ситуацию , когда тип varDispatch
и значение nil
. Он также включает пустые и «неизвестные» значения и пользовательские типы вариантов. Я вижу это в моем исходном коде на Delphi 2005; Не знаю, сколько раньше он был включен.
Любопытно, что VBA - Nothing
это не то же самое Unassigned
, Null
или Empty
, поэтому вы не можете использовать, например:
// 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
это, вероятно, особый случай; Я не думаю, что с автоматизацией такое случается слишком часто.