调用Excel范围(IRange)上的select时调用0x800a03ec。 范围从工作表的使用范围返回

我试图select“使用的范围”。 我得到工作表的UsedRange,然后我调用它的selectfunction。 我select呼叫时收到HRESULT 0x800a03ec。

代码如下:

COleVariant结果;

HRESULT hr = AutoWrap(DISPATCH_METHOD,&result,irange,L“Select”,0);

我不会打扰发布AutoWrap函数的代码(除非有人问)。 这是相当知名的,我没有修改它。

我很确定这个irange是好的,因为我尝试了一些调用来validation它是否符合我的期望,而且确实如此。 如果我遍历它,我可以看到每个单元格的内容(这是正确的)。 返回的行数和列数是正确的,并返回“Address”属性。

工作表未locking。

我已经看到了与Locale有关的其他问题,我的系统设置为美国英语,就像我的用户帐户一样。 两者都没有改变。

希望有人能帮助!

更新 :我也试过了

hr = iRange->Select(vResult); 

这确实返回S_OK,但它不select范围。 通常,我不能直接调用iRange结构中的函数; 结果是gpf或访问冲突 – 所以我必须使用autowrap函数(驱动一个Invoke调用)。 我不惊讶这个电话不起作用。

我也尝试打开非只读模式,如果我被locking的Excel文件。 这并没有解决这个问题。 我可以通过从范围中获取单个项目(单元格)来select单个单元格,然后调用它的“select”,但是我无法select范围。

我find了这个问题的答案。 这在DSOFRAMER示例(Microsoft KB 311765)中使用时似乎只是一个问题。 DSOFramer是用于embeddedMS Office文档的通用ActiveX控件。 这个问题也只发生在一个debugging版本中; 发布版本没问题。

我还发现了一个解决方法,可用于发布或debugging版本:获取范围内的任何单元格(使用get_Item),然后调用该项目上的select,然后再次select取消select它。 一旦完成,可以在范围内调用select。 显然,如果已经select了一个单元格(或者如果select状态未定义),则不能在该范围上调用select。