Textfeld aktivieren

Hallo,
hab wieder ne Frage:

Wie aktiviere ich in Word 2003, über VBA ein Textfeld das sich in einer Fußzeile befindet, um dort ein „Ersetzen“(Replace) durchführen zu können.

Die Fußzeile aktiviere ich wie folgt:

ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter

Und wie mache ich das jetzt mit dem Textfeld das dort drinnen ist?

mfg M.

Wie aktiviere ich in Word 2003, über VBA ein Textfeld das sich
in einer Fußzeile befindet, um dort ein „Ersetzen“(Replace)
durchführen zu können.
Die Fußzeile aktiviere ich wie folgt:

ActiveWindow.ActivePane.View.SeekView =
wdSeekCurrentPageFooter
Und wie mache ich das jetzt mit dem Textfeld das dort drinnen
ist?

Hi M.,

mit vba-Fraen zu outlook, Word erwischst du mich immer auf dem falschen Fuß, da paßt Fußzeile schon gut :smile:
Mein Excel-Fuß ist besser ausgebildet.

So wie mich in Excel die Angabe Dropdown-Feld erschüttern läßt, weil es da Minimum 3 verschiedene Dropdown-Felder gibt, die alle verschieden angesprochen werden, so gilt das noch mehr für Word mit „Textfeld“, da gibts eine für mich unbekannte Anzahl von verschiedenen Textfeldern.

Also,wenn ich das lösen soll, mußt du mir halt Step by Step sagen wie du da das Textfeld in der Fußleiste erzeugt hast.

Oder aber, du bittest Rainer (den hiesigen Mod) deinen Beitrag hier zu löschen, stelst ihn im Wordbrett neu ein und fragst an wie man das per Vba oder manuell machen könnete.
Wenn kein Code als Antwort kommt sondern nur manuelle Vorgehensweise, so nimm diese und zeichne ein Makro auf während du sie durchführst.

Gruß
Reinhard

Also,wenn ich das lösen soll, mußt du mir halt Step by Step
sagen wie du da das Textfeld in der Fußleiste erzeugt hast.

Oder aber, du bittest Rainer (den hiesigen Mod) deinen Beitrag
hier zu löschen, stelst ihn im Wordbrett neu ein und fragst an
wie man das per Vba oder manuell machen könnete.
Wenn kein Code als Antwort kommt sondern nur manuelle
Vorgehensweise, so nimm diese und zeichne ein Makro auf
während du sie durchführst.

Gruß
Reinhard

Hallo Reinhard,

Also Step by Step:
>Hab was in ne Fußzeile geschrieben.
>Auf diese Doppelklick, dass sie aktiviert ist.
>Einfügen --> Textfeld
>Das Textfeld auserhalb von dem Feld „Erstellen sie ihre Zeichnung hier“ (das beim erzeugen eines Textfeldes immer kommt) erzeugt.
>Dann noch das Textfeld auf den linken Rand des Blattes gezogen (was Vertikal reingeschrieben).

Das mit dem Makrorekorder hab ich auch schon probiert, man kann die Fußzeile und das Textfeld aber nicht WÄREND des Aufzeichnen aktivieren. Das muss man vorher machen. Und dann steht im Code eben nur der Ersetzen-Code drinnen ohne Aktivieren der einzelnen Felder.

mfg M.

Das mit dem Makrorekorder hab ich auch schon probiert, man
kann die Fußzeile und das Textfeld aber nicht WÄREND des
Aufzeichnen aktivieren. Das muss man vorher machen. Und dann
steht im Code eben nur der Ersetzen-Code drinnen ohne
Aktivieren der einzelnen Felder.

Hi M.,

ja, der mistige Rekorder in Word zeichnet Mausbewegungen nicht auf :frowning:

Das Textfeld hat den Namen

Text Box X

in dieser Schreibweise, X ist eine fortlaufende Nunmmer, die bei 1 beginnt.

In ein Standardmodul:

Sub TB()
Dim rHdr As Range, oShp As Shape
Set rHdr = ActiveDocument.Sections(1).Footers(1).Range
For Each oShp In rHdr.ShapeRange
 If oShp.Type = msoTextBox Then
 oShp.TextFrame.TextRange = "Huhu"
 End If
Next
End Sub

Gruß
Reinhard

Hallo Reinhard,

So wie du mir den Code geschrieben hast geht es perfekt, d.h. ich kann in das Textfeld in dem ich was ersetzen will „Huhu“ reinschreiben.

Jetzt wollte ich da den Ersetzen-Code miteinbinden. Bitte schaus dir an. Kann der Code überhaupt theoretisch funktionieren?
Wenn ich ihn ausführe funktioniert er nämlich nicht.

Private Sub ReplaceTextbox()

Dim rHdr As Range, oShp As Shape
Set rHdr = ActiveDocument.Sections(1).Headers(1).Range
For Each oShp In rHdr.ShapeRange
If oShp.Type = msoTextBox Then
Call ReplaceMain
End If
Next

End Sub

Sub ReplaceMain()

With Selection.Find
.ClearFormatting
.Text = „#Datum#“
.Replacement.ClearFormatting
.Replacement.Text = „25.11.2008“
.Execute Replace:=wdReplaceAll, Forward:=True, _
Wrap:=wdFindContinue
End With
End Sub

mfg M.

So wie du mir den Code geschrieben hast geht es perfekt, d.h.
ich kann in das Textfeld in dem ich was ersetzen will „Huhu“
reinschreiben.

Jetzt wollte ich da den Ersetzen-Code miteinbinden. Bitte
schaus dir an. Kann der Code überhaupt theoretisch
funktionieren?
Wenn ich ihn ausführe funktioniert er nämlich nicht.

Hi M.,

der Code funktioniert schon, du siehst es nur nicht :smile:

Ich kenne mich in Word nicht aus, kann also gar nicht exakt deuten was du da mit dem Code geplant hast.

Was immer „Selection.Find“ für ein Word-Objekt ist, in „.Text“ wird schon „#Datum#“ reingeschrieben als String.
Auch „.Replacement.Text“ wird mit „25.11.2008“ beschrieben.
Innsofern klappt dein Code.

Der „.Execute“-Aufruf bewirkt nichts sichtbares in „Selection.Find“.

Wie wäre es damit:

Private Sub ReplaceTextbox1()
Dim rHdr As Range, oShp As Shape
Set rHdr = ActiveDocument.Sections(1).Footers(1).Range
For Each oShp In rHdr.ShapeRange
 If oShp.Type = msoTextBox Then
 Call ReplaceMain(oShp)
 End If
Next
End Sub
'
Sub ReplaceMain(Sh)
Sh.TextFrame.ContainingRange.Text = "25.11.2008"
End Sub

Gruß
Reinhard

Private Sub ReplaceTextbox()

Dim rHdr As Range, oShp As Shape
Set rHdr = ActiveDocument.Sections(1).Headers(1).Range
For Each oShp In rHdr.ShapeRange
If oShp.Type = msoTextBox Then
Call ReplaceMain
End If
Next

End Sub

Sub ReplaceMain()

With Selection.Find
.ClearFormatting
.Text = „#Datum#“
.Replacement.ClearFormatting
.Replacement.Text = „25.11.2008“
.Execute Replace:=wdReplaceAll, Forward:=True, _
Wrap:=wdFindContinue
End With
End Sub

mfg M.

Hallo Reinhard,

tut mir leid ich glaube ich hab mich falschausgedrückt:
Die Prozedur „ReplaceMain“ ist ein Code der mir #Datum# mit 25.11.2008 ersetzt. Funktioniert auch wenn was normal im Dokument steht.

Wenn ich diesen Befehl in der Fußzeile ausführen will muss ich sie vorher aktivieren, so:
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter

Wenn ich den Code so ausführe wie ich ihn dir gepostet habe ersetzt er mir die #Datum# die normal im Dokument stehn, aber nicht die im Textfeld.

Private Sub ReplaceTextbox()

Dim rHdr As Range, oShp As Shape
Set rHdr = ActiveDocument.Sections(1).Headers(1).Range
For Each oShp In rHdr.ShapeRange
If oShp.Type = msoTextBox Then
Call ReplaceMain
End If
Next

End Sub

Sub ReplaceMain()

With Selection.Find
.ClearFormatting
.Text = „#Datum#“
.Replacement.ClearFormatting
.Replacement.Text = „25.11.2008“
.Execute Replace:=wdReplaceAll, Forward:=True, _
Wrap:=wdFindContinue
End With
End Sub

Eigentlich denk ich mir müsste es ja sowas wie das aktivieren der Fußzeile auch für eine Textfeld geben, oder irgendwie den Text im Textfeld markieren und dann ersetzen, oder so…

mfg M.

Hallo M.,

tut mir leid ich glaube ich hab mich falschausgedrückt:
Die Prozedur „ReplaceMain“ ist ein Code der mir #Datum# mit
25.11.2008 ersetzt. Funktioniert auch wenn was normal im
Dokument steht.

Im Dokument wwürde ich so löschen:

Sub Loesch()
With ActiveDocument.Content
 .Text = Replace(.Text, "#Datum#", "25.11.2008")
End With
End Sub

Wenn ich diesen Befehl in der Fußzeile ausführen will muss ich
sie vorher aktivieren, so:

Warum mußt du aktivieren? Code klappt doch auch so.

Wenn ich den Code so ausführe wie ich ihn dir gepostet habe
ersetzt er mir die #Datum# die normal im Dokument stehn, aber
nicht die im Textfeld.

Dann nimm den Code hier:

Private Sub ReplaceTextbox1()
Dim rHdr As Range, oShp As Shape
Set rHdr = ActiveDocument.Sections(1).Footers(1).Range
For Each oShp In rHdr.ShapeRange
 If oShp.Type = msoTextBox Then
 Call ReplaceMain(oShp)
 End If
Next
End Sub
'
Sub ReplaceMain(Sh)
With Sh.TextFrame.ContainingRange
 .Text = Replace(.Text, "#Datum#", "25.11.2008")
End With
End Sub

Gruß
Reinhard

1 Like

Hab dir per e-Mail eine Datei geschickt, schau bitte mal was passiert. Es geht ums Textfeld am linken Seitenrand.

mfg M.

Hab dir per e-Mail eine Datei geschickt, schau bitte mal was
passiert. Es geht ums Textfeld am linken Seitenrand.

Hallo M.,

warum auch immer gehört es mit zur Kopfzeile und der Code ändert auch da korrekt.

Private Sub ReplaceTextbox()
Dim rHdr As Range, oShp As Shape
Set rHdr = ActiveDocument.Sections(1).Headers(1).Range
 For Each oShp In rHdr.ShapeRange
 If oShp.Type = msoTextBox Then
 Call ReplaceMain(oShp)
 End If
Next
End Sub
'
Sub ReplaceMain(Sh)
With Sh.TextFrame.ContainingRange
 MsgBox .Text
 .Text = Replace(.Text, "#Datum#", "25.11.2008")
 MsgBox .Text
End With
End Sub

Gruß
Reinhard

Hab dir per e-Mail eine Datei geschickt, schau bitte mal was
passiert. Es geht ums Textfeld am linken Seitenrand.

Hallo M.,

warum auch immer gehört es mit zur Kopfzeile und der Code
ändert auch da korrekt.

Ja ersetzen tut er, aber er schmeißt das ganze Textfeld irgendwie durcheinander.

mfg M.

warum auch immer gehört es mit zur Kopfzeile und der Code
ändert auch da korrekt.

Ja ersetzen tut er, aber er schmeißt das ganze Textfeld
irgendwie durcheinander.

Hallo M.,

da hauen irgendwie die TAbs rein oder eine autom. Formatierung durch Word oder so. Aber das ist ja keine Vba-Frage mehr, das ist was für die Wordprofis im anderen Brett.

Wenn es dort eine manuelle Lösung gibt, die dann wieder per Vba durchführen lassen ist was anderes.

Mir fällt nur sowas ein:

Sub ReplaceMain(Sh)
With Sh.TextFrame.ContainingRange
 While InStr(.Text, Chr(9) & Chr(9)) \> 0
 .Text = Replace(.Text, Chr(9) & Chr(9), Chr(9))
 Wend
 .Text = Replace(.Text, "#Datum#", "25.11.2008")
End With
End Sub

Gruß
Reinhard

1 Like

Sub ReplaceMain(Sh)
With Sh.TextFrame.ContainingRange
While InStr(.Text, Chr(9) & Chr(9)) > 0
.Text = Replace(.Text, Chr(9) & Chr(9), Chr(9))
Wend
.Text = Replace(.Text, „#Datum#“, „25.11.2008“)
End With
End Sub

Hallo Reinhard,
bringt leider auch nichts, aber egal:
Ich hab einfach die Tabulator durch 50.000 Leerzeichen ersetzt. Macht nichts da in diese Textbox niemand etwas reinschreiben muss. (Jetzt schmeißt er nichts mehr durcheinander :smile:

Ich sag mal Problem gelöst und vielen, vielen Dank an Reinhard, der sich wiedermal voll bewiesen hat.

mfg MPunkt