Ich versuche gerade, einen Geschäftsbrief in Anlehnung an DIN 5008 zu entwerfen. Die Anschriftzone ist dort exakt positioniert, weshalb ich eine Formatvorlage mit Positionsrahmen innerhalb der Kopfzeile verwende.
Ich würde nun gerne die Anschrift per Mausklick aus einer Liste mit Kontakten beziehen (die Programmierung hierfür soll mit VB2010 entstehen).
Das eigentliche Problem ist: Kann man programmgesteuert einen solchen Positionsrahmen „anwählen“ oder „ansprechen“, den enthaltenen Text löschen und dann einen neuen Text einfügen? Kennt jemand die Syntax für eine solche Prozedur?
In Word 2007 kann man scheinbar keinen Positionsrahmen anklicken und auswählen, während ein Makro aufgezeichnet wird. Daher komme ich nicht einmal annähernd an die korrekte Syntax.
dann ist es wohl kein Positionsrahmen, sondern ein Textfeld. Ich weiß nicht, ob Word2007 noch mehr Klassen hat.
füge genau das, was Du im fraglichen Dokument ansprechen willst, in ein neues leeres Dokument ein
Alt+F11 für VBE, Strg+G für Direktfenster*
eingeben und mit Enter bestätigen:**
? ActiveDocument.Shapes.Count
wenn Ergebnis 0, dann
? ActiveDocument.InlineShapes.Count
einer der Befehle sollte eine 1 zurückliefern. Dann wissen wir, von welchem Typ Dein „Positionsrahmen“ ist.*** Dann kannst Du den ersten Vorschlag entsprechend abändern.
Wenn nicht, könnte es daran liegen, daß nur der Haupttext abgesucht wird (eine Vermutung). Ich nehme aber an, daß wir das jetzt 'rauskriegen.
HTH.
M.
______________________
* Rückmeldung, ob das in 2007 auch so geht, wäre nett!
** Fragezeichen ist wichtig, sonst gibt’s den Fehler „beim Kompilieren: Unzulässige Verwendung einer Eigenschaft“. Ist allerdings gelogen , VBE interpretiert.
*** Okay, die vorgeschlagene Methode, den Objekttyp zu finden, ist nicht die eleganteste (Typename()!), aber die mit dem wenigsten Schreibaufwand. Ben hald emmer no a Schwoob…
Es ist ein Positionsrahmen, definiert über eine Formatvorlage. Ich habe kein Textfeld eingefügt.
Beide Varianten geben 0 zurück.
Ich sehe da, ehrlich gesagt, wenig Hoffnung, obwohl es sehr schön wäre, Word verwenden zu können. In Excel kann ich doch auch jede Zelle direkt ansprechen.
Ich habe jetzt 'mal statt des Positionsrahmens einen ActiveX-Label in die Kopfzeile eingefügt. Der erscheint auch auf jeder neuen Seite und der Inhalt wird ebenfalls auf jeder Seite aktualisiert, sobald ich den Inhalt per Mausklick ändere. Ich werde 'mal ausprobieren, ob ich diesen Label aus VB2010 heraus ansprechen kann.
Kopf-/Fußzeilen sind gehören zum Abschnitt, nicht zum Dokument
‚wdHeaderFooterPrimary‘ bezieht sich auf jede Kopfzeile; wenn aber ‚erste Seite anders‘ und ‚gerade/ungerade anders‘ aktiv ist, nur auf die ungerade Kopfzeile
um zuverlässig herauszufinden, auf welchen Absatz Du zugreifen mußt, kannst Du entweder in der Formatvorlage den Positionsrahmen wegnehmen, abzählen oder wieder zugeben, oder im Direktfenster die 2 verändern
Kopf-/Fußzeilen sind gehören zum Abschnitt, nicht zum
Dokument
‚wdHeaderFooterPrimary‘ bezieht sich auf jede Kopfzeile;
wenn aber ‚erste Seite anders‘ und ‚gerade/ungerade anders‘
aktiv ist, nur auf die ungerade Kopfzeile
um zuverlässig herauszufinden, auf welchen Absatz Du
zugreifen mußt, kannst Du entweder in der Formatvorlage den
Positionsrahmen wegnehmen, abzählen oder wieder zugeben, oder
im Direktfenster die 2 verändern