Frage

Ich entwickle ein Excel 2007-Add-In mit Visual Studio Tools für Office (2008).Ich habe ein Blatt mit mehreren ListObjects darauf, die beim Start an Datentabellen gebunden werden.Wenn sie gebunden sind, wird ihre Größe automatisch korrekt angepasst.

Das Problem entsteht, wenn sie erneut gebunden werden.Ich habe eine benutzerdefinierte Schaltfläche in der Multifunktionsleiste, die zurück zur Datenbank führt und basierend auf einigen vom Benutzer eingegebenen Kriterien verschiedene Informationen abruft.Diese neuen Daten kommen zurück und werden erneut an die ListObjects gebunden. Diesmal wird ihre Größe jedoch nicht geändert, und ich erhalte eine Ausnahme:

ListObject kann nicht gebunden werden, da es nicht geändert werden kann, um die Daten anzupassen.Das ListObject konnte keine neuen Zeilen hinzufügen.Dies kann aufgrund der Unfähigkeit verursacht werden, Objekte unten des Listenobjekts zu verschieben.

Innere Ausnahme:„Methode beim Einfügen der Range-Klasse fehlgeschlagen“
Grund:Microsoft.Office.Tools.Excel.FailureReason.CouldNotResizeListObject

Ich konnte bei Google oder MSDN nichts sehr aussagekräftiges zu diesem Fehler finden.Ich habe schon eine Weile versucht, das herauszufinden, aber ohne Erfolg.

Grundlegende Codestruktur:

//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);

Beachten Sie, dass diese Ausnahme auch dann auftritt, wenn das ListObject kleiner wird, und nicht nur, wenn es wächst.

War es hilfreich?

Lösung

Wenn jemand anderes dieses Problem hat, habe ich die Ursache für diese Ausnahme gefunden.Die Größe von ListObjects wird beim Binden automatisch angepasst, sofern sie keine Auswirkungen auf andere Objekte auf dem Blatt haben.Beachten Sie, dass sich ListObjects nur auf die Bereiche auswirken können, die sie umschließen.

In meinem Fall hatte das Listenobjekt, das über dem anderen lag, weniger Spalten als das darunter.Nehmen wir an, das obere ListObject hatte zwei Spalten und das untere ListObject hatte drei Spalten.Als das oberste ListObject seine Zeilenanzahl änderte, konnte es keine Änderungen an der dritten Spalte vornehmen, da diese sich nicht im zugrunde liegenden Bereich befand.Das bedeutet, dass keine Zellen in der dritten Spalte verschoben werden konnten und daher das zweite ListObject nicht ordnungsgemäß verschoben werden konnte, was zu meiner obigen Ausnahme führte.

Das Ändern der Positionen der ListObjects, um das breitere über dem kleineren zu platzieren, funktioniert einwandfrei.Der obigen Logik folgend bedeutet dies nun, dass das breitere ListObject alle Spalten des zweiten ListObject verschieben kann, und da sich unter dem kleineren nichts befindet, kann es auch alle erforderlichen Zellen verschieben.Der Grund, warum ich bei der anfänglichen Bindung keine Probleme hatte, ist, dass beide ListObjects eine einzelne Zelle waren.

Da dies in meinem Fall nicht optimal ist, werde ich wahrscheinlich leere Spalten verwenden oder versuchen, mit unsichtbaren Spalten herumzuspielen, wenn das möglich ist, aber zumindest ist die Ursache jetzt klar.

Andere Tipps

Ich habe ein ähnliches Problem mit der Aktualisierung mehrerer Listenobjekte.Wir setzen jedes listObject.DataSource = null und führen dann eine erneute Bindung durch, beginnend beim unteren Listenobjekt und arbeiten uns nach oben statt von oben nach unten.

Nur eine Idee, was Sie ausprobieren sollten, um zu sehen, ob Sie dadurch weitere Informationen erhalten:Versuchen Sie, die Größe des Listenobjekts vor der Ausnahmezeile zu ändern und prüfen Sie, ob dadurch auch eine Ausnahme ausgelöst wird.Wenn nicht, versuchen Sie, die Größe des Bereichsobjekts an die neue Größe der DataTable anzupassen.

Sie sagen, dass dies geschieht, wenn das ListObject schrumpft und wächst.Passiert das auch, wenn das ListObject gleich groß bleibt?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top