Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo zusammen,

ich arbeite gerade an einem kleinen Projekt (Seminarverwaltung).

Ich weise verschiedenen Kursen verschiedene Teilnehmer zu. Falls ein Teilnehmer im Kurs angenommen wird, bekommt er eine Zusage und wenn ein Kurs voll ist, bekommt der Teilnehmer eine Absage mit max. 3 Ersatzterminen.

Nun meine Frage, wie füge ich variable Daten in meine Word-Dokumente?

Die Worddokumente aufzurufen ist ja kein Problem, dazu generiere ich mir ein Word-Object und öffne sich mit objekt.documents.open strfile

Aber wie kann ich diesen Dokumenten jetzt daten übergeben? Ich gehe davon aus, dass die Dokumente dann textmarken an bestimmten stellen brauchen oder?

Wäre für jede Hilfe dankbar.

MfG,

Patrick

Geschrieben

Hallo,

du musst mit docvariable Arbeiten. Dies könnste zum Beispiel wie folgt aussehen:

Das Beispiel ist jetzt von einem bestimmten Produkt, die Logig ist aber generell bei allen Produkten die gleiche. In Word kannst du dann die Daten mit { DOCVARIABLE "AdresseStraße" \* CHARFORMAT } übergeben. Bedenke bitte das die geschweiften klammern für eine Feldfunktion stehen.

Option Explicit

' Objekte bestimmen

Dim ActiveDocument

Set ActiveDocument = TargetObject

Dim Application

Set Application = ActiveDocument.Application

Application.Visible = True

Dim ActiveWindow

Set ActiveWindow = Application.ActiveWindow

Dim Selection

Set Selection = Application.Selection

' Alle Textmarken bestimmen

ReDim aBookmarks(ActiveDocument.Bookmarks.count)

Dim iCount

For iCount = 1 To ActiveDocument.Bookmarks.count

aBookmarks(iCount) = ActiveDocument.Bookmarks(iCount)

Next

' Beginnt Sie mit dem entsprechenden Kürzel Feld_?

Dim sBookmark

Dim Field

iCount = 0

For Each sBookmark In aBookmarks

If Left(sBookmark, 5) = "Feld_" Then

' Lade das Feld (falls vorhanden)

Set Field = AGVIP.ActiveAddress.Fields(Mid(sBookmark, 6))

If Not Field Is Nothing Then ErsetzeTextmarke CStr(sBookmark), CStr(Field)

End If

Next

' Aus Gechwindigkeitsgründen nur bestimmte Felder übertragen

' Dazu muss aber geklärt sein welche Felder in der AGVIP Datenbank

' vorhanden sind. Gibt es das Feld Nachname dann wird das Feld

' Ansprechpartner als Nachname verstanden.

' Die entsprechenden Dokvariablen die Optional sind:

' Anrede, Titel, Vorname, Nachname, Ansprechpartner

' werden jedoch immer erzeugt.

Dim f

If AGVIP.ActiveAddress.Fields("Ansprechpartner").Name="Nachname" Then

' Diese Felder immer übertragen

f = Array("AdresseStraße", _

"BriefAnrede", _

"TERMADM", _

"TERMDatum", _

"TERMZeit", _

"@TERMort", _

"Autoneutyp", _

"Autoneudatum", _

"@autoneupr", _

"Kurzname", _

"Nummer", _

"Ansprechpartner", _

"TelefaxFirma", _

"TelefonDurchwahl", _

"Email1")

' Dummys füllen.

ActiveDocument.Variables.Item("Ansprechpartner").Value = Convert("")

Else

' Diese Felder immer übertragen

f = Array("AdresseStraße", _

"BriefAnrede", _

"TERMADM", _

"TERMDatum", _

"TERMZeit", _

"@TERMort", _

"Autoneutyp", _

"Autoneudatum", _

"@autoneupr", _

"Kurzname", _

"Nummer", _

"Ansprechpartner", _

"TelefaxFirma", _

"TelefonDurchwahl", _

"Email1")

' Dummys füllen

ActiveDocument.Variables.Item("Anrede").Value = Convert("")

ActiveDocument.Variables.Item("Titel").Value = Convert("")

ActiveDocument.Variables.Item("Vorname").Value = Convert("")

ActiveDocument.Variables.Item("Nachname").Value = Convert("")

End If

' Textdaten übertragen in die DocVariablen

Dim n, v, t

For Each n In f

' Kennzeichen?

If Left(n,1)="@" Then

' Variable laden

Set v = AGVIP.ActiveAddress.Fields(Mid(n,2))

t = v.Property.Text

Else

Set v = AGVIP.ActiveAddress.Fields(n)

t = v.Value

End If

' Feld kopieren

ActiveDocument.Variables.Item(n).Value = Convert(t)

Next

' Alles markieren und Felder aktualisieren und Felder fixieren

ActiveWindow.View.ShowFieldCodes = False

Application.Selection.WholeStory

Application.Selection.Fields.Update

Application.Selection.Fields.Unlink

' Zum Start

' Application.Selection.Goto ,,,"Start"

' Speichern

ActiveDocument.Save

' TextMarke ersetzen (aber nicht die Textmarke zerstören)

Sub ErsetzeTextmarke(sTextmarke, sText)

'Text ersetzen

' Gehe zu Textmarke wdGoToBookmark = -1

Selection.GoTo -1,,,sTextmarke

'Start merken Text einsetzen und Textmarke neu setzen

Dim lStart

lStart = Selection.Start

Selection.text = ErsetzeCrLf(sText)

Selection.Start = lStart

' Textmarke erneut setzen

ActiveDocument.Bookmarks.Add sTextmarke, Selection.Range

ActiveDocument.Bookmarks.ShowHidden = True

End Sub

' Kleine Helper Funktion, zum entfernen von CR/LF Kombinationen

Function ErsetzeCrLf(sText)

Dim I

I = InStr(sText, Chr(13))

While I <> 0

sText = Left(sText, I - 1) + Chr(11) + Mid(sText, I + 1)

I = InStr(I, sText, Chr(13))

Wend

ErsetzeCrLf = sText

End Function

Geschrieben

Hallo,

also ich mache so was ähnliches, ich öffne aus dem SAP ein Word-Template und fülle dieses mit Werten aus dem SAP.

Deshalb habe ich in das Template Formularfelder eingefügt, die ich dann mit dem VB-Makro ansprechen kann:

ThisDocument.FormFields("TEST").Result = "Das steht jetzt im Formularfeld"

Hoffe ich konnte helfen.

Gruss

Schaf

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...