Entwickler-Ecke

Alle Sprachen - Alle Plattformen - Zellen können in VBA nicht bearbeitet werden


Kirk1701A - Do 22.04.21 20:40
Titel: Zellen können in VBA nicht bearbeitet werden
Hallo zusammen,

ich arbeite gerade an meinem Makro für eine Briefmaske. Ich habe im Briefkopf eine Tabelle drin, von der eine bestimmte Zelle, abhängig der Angaben gelöscht und daher die direkt darüber etwas vergrößert, oder gar nichts verändert werden soll.

Den Code habe ich bereits geschrieben, um die Zelle zu löschen/die Zelle zu vergrößern. Leider kommt bei der Ausführung der Fehler, dass eine Sammlung fehle, aber ich weiß nicht, welche Sammlung genau damit gemeint ist (Laufzeitfehler 5941). Folgenden Code habe ich diesbezüglich geschrieben:


Quelltext
1:
2:
ActiveDocument.Tables(1).Rows(2).Cells(4).Delete
Call ActiveDocument.Tables(1).Rows(2).Cells(3).SetHeight(InchesToPoints(2.2), wdRowHeightExactly)


Folgende Zelle soll gelöscht werden: Spalte 2 Zeile 4
Folgende Zelle soll vergrößert werden: Spalte 2 Zeile 3

Ich gehe hier bei Tables, Rows und Cells aus, dass diese nicht Nullbasierend sind (wie sie auch bei anderen Sammlungen sind).

Hat jemand eine Idee? Das ist quasi das letze bissche Code, um mein Makro zu vervollständigen. Danach ist es fertig.

MfG
Kirk


Th69 - Fr 23.04.21 08:56

Du kannst doch auch VBA debuggen?
Irgendeines der Objekte in ActiveDocument.Tables(1).Rows(2).Cells(x) wird wohl nicht existieren (NULL sein).

Mit Sammlung ist vom englischen übersetzt "collection" ("table", "list", "map") gemeint.


Kirk1701A - Fr 23.04.21 14:20

Hallo Th69,

danke für deine Antwort.

Ich habe es mit Debugging herausgefunden, dass es an diesen beiden Zeilen liegt. Hmm... Ok, dann ist mit Sammlung wohl wirklich das gemeint. Ich zeige hier mal eine Zeichnung, wie die Tabelle optisch aussieht (die rote Zelle soll vergrößert werden in der Höhe, die blaue Zelle soll gelöscht werden):

Schema

Ich weiß nur nicht, was syntaktisch oder logisch falsch sein sollte. Diese Zellen existieren von Anfang an.

MfG


Th69 - Fr 23.04.21 14:46

Meinst du nicht Columns(2) statt Rows(2)?

Du könntest (bzw. solltest) auch die beiden Code-Zeilen aufteilen und den gemeinsamen Teil nur einmalig lesen:

Quelltext
1:
2:
table = ActiveDocument.Tables(1);
// ...

So kannst du dann auch explizit auf NULL testen (und gleiches dann für die weiteren Unterobjekte).

Aber mit einem Haltepunkt in dieser Zeile solltest du es auch per Debugger sehen.


Kirk1701A - Fr 23.04.21 15:08

user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
Meinst du nicht Columns(2) statt Rows(2)?

Ist es nicht eigentlich egal? Aber um das kurz zu erwähnen, egal ob Columns oder Rows, beides hat den selben Effekt.


Th69 - Fr 23.04.21 15:26

Kann es sein, daß es links eine Untertabelle ist? D.h. du müßtest erst auf Zeile 1, Spalte 2 zugreifen und dann dessen Tabelle auswerten.

Aber wie gesagt, mit dem Debugger kannst du es selber einfach herausfinden...


Kirk1701A - Fr 23.04.21 15:40

Kann es eventuell daran liegen, dass die Tabelle in der Kopfzeile liegt? Denn selbst die Sammlung Tabelle ist leer. Da sind keine Objekte enthalten.


Kirk1701A - Fr 23.04.21 15:58

Sorry, habe eben falschen Status angegeben.

Also könnte es vielleicht an der Kopfzeile liegen?


Th69 - Fr 23.04.21 16:07

Ja, dann ist klar, daß die Tabelle leer ist.
Du mußt mittels HeadersFooters [https://docs.microsoft.com/de-de/office/vba/api/word.headersfooters] zuerst auf das passende HeaderFooter [https://docs.microsoft.com/de-de/office/vba/api/word.headerfooter]-Objekt zugreifen...


Kirk1701A - Fr 23.04.21 16:10

user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
Du mußt mittels HeadersFooters [https://docs.microsoft.com/de-de/office/vba/api/word.headersfooters] zuerst auf das passende HeaderFooter [https://docs.microsoft.com/de-de/office/vba/api/word.headerfooter]-Objekt zugreifen...


Hmm... Ja, das ist logisch. Ich war mir nur nicht sicher und wusste jetzt auch aus dem ff nicht wirklich, wie ich das Objekt anspreche. Danke dir


Kirk1701A - Fr 23.04.21 16:28


Quelltext
1:
2:
3:
4:
With ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Range.Tables(1).Columns(1)
  .Cells(4).Delete
  Call .Cells(3).SetHeight(CentimetersToPoints(2.2), wdRowHeightExactly)
End With


Also, ich habe das so geändert. Ich verstehe nur nicht, wieso "Sections" leer ist. Ich begreife das nicht wirklich, da ich keinen Umbruch oder dergleichen benutze.