Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Word-Dokumente über VB mit Daten füllen

Empfohlene Antworten

Veröffentlicht

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

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

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

Danke für die Hilfe,

ich denke damit kann ich was anfangen. Werde es am Dienstag direkt mal ausprobieren.

mfg,

patrick

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.