ciekawe, VBA na Nothing
jest nie taka sama jak Unassigned
, Null
lub Empty
, więc nie można użyć, na przykład:
// 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!');
Zamiast korzystać z tej funkcji:
function VarIsNothing(V: OleVariant): Boolean;
begin
Result :=
(TVarData(V).VType = varDispatch)
and
(TVarData(V).VDispatch = nil);
end;
// ...
if (VarIsNothing(MyRange)) then
Aktualizacja
Wygląda na to, że źródła jednostki RTL Variants.pas
zmieniły się między Delphi 5 i 2007. Według @mghie (patrz komentarze), funkcja VarIsEmpty
wykonałaby zadanie w D5. Jednak w D2007 nie wydaje się, aby tak było, więc prawdopodobnie będziesz potrzebować ponownie powyższej funkcji.
Należy również zauważyć, że VBA to Nothing
jest prawdopodobnie dość szczególnym przypadkiem; Nie wydaje mi się, że zbyt często spotyka się to z automatyzacją.
?! Masz rację! Całkowicie przeoczyłem to! Zaakceptowałem twoją odpowiedź i zmienię swój kod źródłowy ;-) Dziękuję! – onnodb