Curiosamente, VBA de Nothing
es no lo mismo que Unassigned
, Null
o Empty
, por lo que no se puede utilizar, por ejemplo:
// 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!');
su lugar, utilice esta función:
function VarIsNothing(V: OleVariant): Boolean;
begin
Result :=
(TVarData(V).VType = varDispatch)
and
(TVarData(V).VDispatch = nil);
end;
// ...
if (VarIsNothing(MyRange)) then
Actualización
Al parecer, las fuentes de la unidad RTL Variants.pas
han cambiado entre Delphi 5 y 2007. De acuerdo con @mghie (ver comentarios), la función VarIsEmpty
hubieran hecho el trabajo en D5. Sin embargo, en D2007, este ya no parece ser el caso, por lo que probablemente necesitará la función anterior nuevamente.
Además, tenga en cuenta que Nothing
de VBA es probablemente un caso bastante especial; No creo que uno lo encuentre con demasiada frecuencia con la automatización.
?! ¡Tienes razón! ¡Lo pasé completamente por alto! He aceptado tu respuesta y cambiaré mi código fuente ;-) ¡Muchas gracias! – onnodb