Excel自动化。需要从范围中选择多个项目

时间:2008-11-07 19:55:04

标签: excel automation ole dsoframer

我有代码可以让我在范围中选择一个项目:

        COleVariant vItems = cstrAddr;
        hr = AutoWrap(
                            DISPATCH_PROPERTYGET, 
                            &vCell, 
                            irange, 
                            L"Item", 
                            2,
                            COleVariant((short)(1)), 
                            COleVariant((short)(1)));
        if (FAILED(hr)) return hr;


        // Use the dispatch interface to select the cell
        COleVariant result;
        hr = AutoWrap(
                        DISPATCH_METHOD, 
                        &result, 
                        vCell.pdispVal, 
                        L"Select", 
                        0);
        if (FAILED(hr)) return hr;

这很好用。但是,我需要选择范围内的所有单元格,但我无法在Item属性的“get”调用中找到指定方法。尝试使用-1,-1 ...尝试在2个变体中传入一对bstr,指定冒号分隔的列范围和行范围;还尝试传入一系列范围规范的单个参数。没有工作。

更新:我也尝试了

hr = iRange->Select(vResult);

这会返回S_OK,但不会选择范围。通常,我不能直接调用iRange结构中的函数;结果是gpf或访问冲突 - 所以我必须使用autowrap函数(来驱动一个Invoke调用)。这个电话不起作用我并不感到惊讶。希望我能做到这一点....这是这个项目的最后一部分。

2 个答案:

答案 0 :(得分:1)

不熟悉那种代码(在VB中,自动化更容易,更容易)我认为在您的示例中,您使用Item属性和Select方法从一个范围中选择一个单元格。正确的吗?

所以在VB中

Dim oRange as Range
Dim oCell as Range

 Set oRange = WorkSheet.Range("A1:A10") '<-- get range
 Set oCell = oRange.Item(1)             '<-- returns first cell in range
 oCell.Select                           '<-- selects first cell

问题是Item属性只返回一个单元格 - 您必须将Select方法应用于原始范围。

Dim oRange as Range

 Set oRange = WorkSheet.Range("A1:A10") '<-- get range
 oRange.Select                          '<-- Selects the range

答案 1 :(得分:1)

我找到了这个问题的答案。在DSOFRAMER示例(Microsoft KB 311765)中使用时,这似乎只是一个问题。 DSOFramer是用于嵌入MS Office文档的通用ActiveX控件。问题也只发生在调试版本中;发布版本很好。

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