1

「使用範囲」を選択しようとしています。ワークシートの UsedRange を取得し、その上で Select 関数を呼び出します。select 呼び出しで HRESULT 0x800a03ec を受け取ります。

コードは次のとおりです。

COleVariant の結果。

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

AutoWrap 関数のコードをわざわざ投稿するつもりはありません (誰かが尋ねない限り)。それはかなり有名で、私はそれを変更していません。

私は irange が良いことを確信しています。なぜなら、私が期待したものを持っていることを確認するためにいくつかの呼び出しを試みたからです。それを繰り返し処理すると、各セルの内容を確認できます (そしてそれは正しいです)。返される行と列の数は正しく、返される "Address" プロパティはチェックアウトされます。

ワークシートはロックされていません。

Locale に関係する他の問題が投稿されているのを見たことがあります。私のシステムは、ユーザー アカウントと同様に米国英語に設定されています。どちらも変更されていません。

誰かが助けてくれることを願っています!

更新:私も試しました

hr = iRange->Select(vResult);

これは S_OK を返しますが、範囲は選択しません。通常、iRange 構造体の関数を直接呼び出すことはできません。結果は gpf またはアクセス違反です。そのため、autowrap 関数を使用する必要があります (Invoke 呼び出しを実行するため)。この呼び出しが機能しないことに驚きはありません。

ロックされた場合に備えて、Excel ファイルを非読み取り専用モードで開いてみました。これで問題は解決しませんでした。範囲から 1 つの項目 (セル) を取得し、その Select を呼び出すことで個々のセルを選択できますが、範囲を選択することはできません。

4

1 に答える 1

3

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

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

于 2008-11-14T19:21:37.170 に答える