我有代码可以让我在范围中选择一个项目:
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调用)。这个电话不起作用我并不感到惊讶。希望我能做到这一点....这是这个项目的最后一部分。
答案 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。