質問

Visual Studio Tools for Office (2008) を使用して Excel 2007 アドインを開発しています。複数の ListObject を含む 1 つのシートがあり、起動時にデータテーブルにバインドされています。バインドすると、正しく自動サイズ調整されます。

問題は、それらが再びバインドされるときに発生します。リボン バーには、データベースに戻り、ユーザーが入力したいくつかの基準に基づいてさまざまな情報を取得するカスタム ボタンがあります。この新しいデータは戻ってきて、ListObjects に再バインドされますが、今回はサイズが変更されず、例外が発生します。

ListObjectはバインドできません。 データに合わせてサイズを変更することはできません。ListObjectは 新しい行を追加できませんでした。これは、以下の原因により引き起こされる可能性があります リストオブジェクトの下にオブジェクトを移動でき ません。

内部例外:「Range クラスの Insert メソッドが失敗しました」
理由:Microsoft.Office.Tools.Excel.FailureReason.CouldNotResizeListObject

Google や MSDN でこのエラーに関する意味のある情報を見つけることができませんでした。私はしばらくこれを理解しようとしましたが、役に立ちませんでした。

基本的なコード構造:

//at startup
DataTable tbl = //get from database
listObj1.SetDataBinding(tbl);
DataTable tbl2 = //get from database
listObj2.SetDataBinding(tbl2);  

//in buttonClick event handler
DataTable tbl = //get different info from database
//have tried with and without unbinding old source
listObj1.SetDataBinding(tbl);              <-- exception here
DataTable tbl2 = //get different info from database
listObj2.SetDataBinding(tbl2);

この例外は、ListObject が拡大するときだけでなく、縮小するときにも発生することに注意してください。

役に立ちましたか?

解決

他の誰かがこの問題を抱えている場合は、この例外の原因を見つけました。ListObject は、シート上の他のオブジェクトに影響を与えない限り、バインド時に自動的にサイズ変更されます。ListObjects は、ListObjects がラップする範囲にのみ影響を与えることに注意してください。

私の場合、他のリスト オブジェクトの上にあるリスト オブジェクトには、その下にあるリスト オブジェクトよりも列が少なくなっています。上部の ListObject には 2 列があり、下部の ListObject には 3 列があるとします。最上位の ListObject が行数を変更したとき、その基になる Range 内にないため、3 番目の列を変更することはできませんでした。これは、3 列目のセルを移動できなかったため、2 番目の ListObject を適切に移動できず、上記の例外が発生したことを意味します。

ListObject の位置を変更して、幅の広いものを小さなものの上に配置すると、正常に機能します。上記のロジックに従うと、これは、幅の広い ListObject が 2 番目の ListObject のすべての列をシフトできることを意味します。また、小さい ListObject の下には何もないので、必要なセルもシフトできることになります。最初のバインディングで問題が発生しなかった理由は、両方の ListObject が単一のセルだったからです。

私の場合、これは最適ではないため、可能であれば空の列を使用するか、非表示の列を試してみることになるでしょうが、少なくとも原因は明らかになりました。

他のヒント

複数のリストオブジェクトの更新でも同様の問題があります。各 listObject.DataSource = null に設定し、一番下の listobject から開始して上からではなく上に向かって再バインドします。

より詳しい情報が得られるかどうかを試してみてください。例外行の前でリスト オブジェクトのサイズを変更して、それによっても例外がスローされるかどうかを確認してください。そうでない場合は、DataTable の新しいサイズに合わせて範囲オブジェクトのサイズを変更してみてください。

これは、ListObject が縮小したり拡大したりするときに発生すると言います。ListObject が同じサイズのままの場合にも発生しますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top