2

範囲内の単一のアイテムを選択できるコードがあります。

        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 呼び出しを実行するため)。この呼び出しが機能しないことに驚きはありません。これが機能することを願っています....これは、このプロジェクトの最後の部分です。

4

2 に答える 2

1

私はこの質問に対する答えを見つけました。これは、DSOFRAMERサンプル(Microsoft KB 311765)で使用した場合にのみ問題になるようです。DSOFramerは、MSOfficeドキュメントを埋め込むための汎用ActiveXコントロールです。この問題は、デバッグビルドでも発生します。リリースビルドは問題ありません。

また、リリースまたはデバッグビルドで機能する回避策を見つけました。範囲内の任意のセルを取得し(get_Itemを使用)、そのアイテムに対してselectを呼び出し、もう一度選択して選択を解除します。それが完了すると、範囲でselectを呼び出すことができます。明らかに、セルがすでに選択されている場合(または、選択状態が未定義の場合)、範囲でselectを呼び出すことはできません。

于 2008-11-14T19:20:43.693 に答える
1

その種のコードに慣れていない (VB では、オートメーションを行う方がはるかに簡単です) あなたの例では、Item プロパティと Select メソッドを使用して範囲から 1 つのセルを選択していると思います。正しい?

だから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 プロパティが 1 つのセルしか返さないことです。Select メソッドを元の範囲に適用する必要があります。

Dim oRange as Range

 Set oRange = WorkSheet.Range("A1:A10") '<-- get range
 oRange.Select                          '<-- Selects the range
于 2008-11-07T20:25:01.843 に答える