检查Variant值“Nothing”

这是我去年遇到的东西,所以SO似乎是一个很好的地方来logging它:)

问:从Delphi中自动化Excel(/ Word / …)时,如何检查Excel函数是否返回variablesNothing (如在VBA中调用)?

VarIsClear函数包括你的情况,其中types是varDispatch和值nil 。 它还包括空值和“未知”值以及自定义变体types。 我在Delphi 2005的源代码中看到它; 我不知道它被包括了多less。

奇怪的是,VBA的NothingUnassignedNullEmpty 一样,所以你不能使用,例如:

 // 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不同)不是做你想要的吗?