Word 2007: Text in Positionsrahmen ändern

Hallo zusammen.

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.

Im Voraus schon einmal vielen Dank für jede Hilfe

VG
Carsten

Hi,

ActiveDocument.Frames(1).Range.Text

HTH.

M.

Hallo Markus.

Nein, das funktioniert nicht. Fehlermeldung, daß das Objekt nicht in der Sammlung enthalten ist.

VG
Carsten

Hallo Casten,

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…

Hallo Markus.

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.

VG
Carsten

Hallo Casten,

Beide Varianten geben 0 zurück.

&

Es ist ein Positionsrahmen, definiert über eine Formatvorlage. Ich habe kein Textfeld eingefügt.

Formatvorlagen sind absatzbezogen (jedenfalls bis 2003). Man könnte deshalb auch den Absatz in der Kopfzeile ansprechen - in einer Prozedur mit

ActiveDocument.Sections(1).Headers( wdHeaderFooterPrimary ).Range.Paragraphs( 2 ).Range.Text

Beachte:

  • 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

? ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Range.Paragraphs( 2 ).Range.Text

Gruß

M.
______
Und St…

Hallo Markus.

Formatvorlagen sind absatzbezogen (jedenfalls bis 2003). Man
könnte deshalb auch den Absatz in der Kopfzeile ansprechen -
in einer Prozedur mit

ActiveDocument.Sections(1).Headers( wdHeaderFooterPrimary ).Range.Paragraphs( 2 ).Range.Text

Beachte:

  • 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

? ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Range.Paragraphs( 2 ).Range.Text

Das hat mir sehr weitergeholfen. Vielen Dank dafür.
Jetzt kann ich die Positionsrahmen „direkt“ ansprechen. Langsam komme ich wohl auf den Trichter.

VG
Carsten