检查Variant值“Nothing”
这是我去年遇到的东西,所以SO似乎是一个很好的地方来logging它:)
问:从Delphi中自动化Excel(/ Word / …)时,如何检查Excel函数是否返回variablesNothing
(如在VBA中调用)?
VarIsClear
函数包括你的情况,其中types是varDispatch
和值nil
。 它还包括空值和“未知”值以及自定义变体types。 我在Delphi 2005的源代码中看到它; 我不知道它被包括了多less。
奇怪的是,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中,这似乎不再是这种情况了,所以你可能会再次需要上述function。
另外,请注意,VBA的Nothing
可能是一个特殊情况, 我不认为用自动化经常遇到它。
VarIsEmpty(与VarIsNull不同)不是做你想要的吗?