Problem exaktes befüllen von Textmarken

21/02/2010 - 21:04 von Andre Gobet | Report spam
Hallo Newsgroup

Ich habe ein recht sonderbares Problem. Zuerst einmal mein Code für
das erstellen eines Briefes:

Me.Hide

Dim signature1 As Boolean
Dim signature2 As Boolean

signature1 = Me.signature1.Value
signature2 = Me.signature2.Value

If signature1 Then

Documents.Add Template:="Modell_Brief_Sig1_D", newtemplate:=False,
documenttype:=0

username
direktwahl
direktfax
email
adresse
versandart
betreff
anrede
anredename
dokument
usernameLeft
funktionLeft
beilagen
End If

Mein Problem gestaltet sich wie folgt.

Beim Starten von Word existiert von Haus aus das Dokument1 welches von
Word ja automatisch generiert wird. Starte ich nun mein Makro habe ich
das Problem, dass gewisse Textmarken nicht befüllt werden.

Starte ich hingegen Word neu und schliesse das leere Dokument1 und
starte anschliessend mein Makro werden alle Textmarken korrekt
befüllt ???

nachfolgend noch der Code einer Textmarke bei welcher dieses Problem
auftritt:

Sub usernameLeft()
'Username am Ende des Briefes
Dim ctext As String
Dim oRNG As Range
Dim oBM As Bookmark

ctext = Me.txtName

If ActiveDocument.Bookmarks.Exists("ibUsernameLeft") Then
Set oRNG = ActiveDocument.Bookmarks("ibUsernameLeft").Range

oRNG.Text = ctext

Set oBM = ActiveDocument.Bookmarks.Add(name:="ibUsernameLeft",
Range:=oRNG)
End If
End Sub

An was kann das liegen? Ich kann ja Word z.B. mit dem Befehl
winword.exe /n starten damit kein Dokument1 erstellt wird nur ist das
auch nicht die Lösung.

Hat eventuell jemand eine Idee an was das liegen könnte und eventuell
einen Lösungsvorschlag.

Danke und Gruss

- André
 

Lesen sie die antworten

#1 Thomas Gahler
21/02/2010 - 21:40 | Warnen spam
Hallo Andre


Beim Starten von Word existiert von Haus aus das Dokument1 welches von
Word ja automatisch generiert wird. Starte ich nun mein Makro habe ich
das Problem, dass gewisse Textmarken nicht befüllt werden.

Starte ich hingegen Word neu und schliesse das leere Dokument1 und
starte anschliessend mein Makro werden alle Textmarken korrekt
befüllt ???


Ergànze deinen Code mit einem Else-Zweig und gebe dort den Namen des
Dokuments aus. Stehst du wirklich dort wo deu meinst?
Da deine Textmarke nicht befüllt wird, müsste wohl der Else-Zweig
angesprungen werden. Jetzt bist du entweder auf dem falschen Dokument, denn
dein .ActiveDocument ist nicht jenes das du denkst, dass es das Aktive ist
oder deine Textmrke tràgt eine andere Bezeichnung.


Sub usernameLeft()
'Username am Ende des Briefes
Dim ctext As String
Dim oRNG As Range
Dim oBM As Bookmark

ctext = Me.txtName

If ActiveDocument.Bookmarks.Exists("ibUsernameLeft") Then
Set oRNG = ActiveDocument.Bookmarks("ibUsernameLeft").Range

oRNG.Text = ctext

Set oBM = ActiveDocument.Bookmarks.Add(name:="ibUsernameLeft",
Range:=oRNG)

ELSE
MSGBOX ACTIVEDOCUMENT.NAME


End If
End Sub

Und falls in deiner MsgBox tatsàchlilch ein anderer Dokumentname ausgegeben
wird, als jener den du erwartet hast, dann wàren wir dort angelangt weshalb
ich dir vor Wochen die Verwendung von Objekten nahegelegt habe. Und
zusàtzlich müssten wir uns auf die Suche machen weshalb denn dein Dokument
nihct mehr das aktive Dokument ist.








Und weil du ganz viele Textmarken befüllen musst, so wàre es sinnvoll, wenn
du das Befüllen der Textmarken in eine eigene Funktion auslagen würdest,
dann hast du die entsprechenden Zeilen nur 1x im Programm drin. Das würde
dann so aussehen

Sub Demo()
Dim doc As Word.Document
Set doc = ActiveDocument

MsgBox funcTextmarkeBefüllen( _
doc:=doc, _
strTextmarkeName:="ibUsernameLeft", _
strTextmarkeText:=Me.txtName)

MsgBox funcTextmarkeBefüllen( _
doc:=doc, _
strTextmarkeName:="ibFunctionLeft", _
strTextmarkeText:=Me.txtFunction)
End Sub

Private Function funcTextmarkeBefüllen( _
ByVal doc As Word.Document, _
ByVal strTextmarkeName As String, _
ByVal strTextmarkeText As String) _
As Boolean

Dim rng As Word.Range
Dim bm As Word.Bookmark

With doc.Bookmarks
If .Exists(strTextmarkeName) Then
Set rng = .Item(strTextmarkeName).Range
rng.Text = strTextmarkeText

Set bm = .Add(strTextmarkeName, rng)

funcTextmarkeBefüllen = True
End If
End With
End Function





Thomas Gahler
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)


- Windows Vista (SP2), Office 2007 (SP2)

Ähnliche fragen