heipa Geschrieben 17. April 2003 Geschrieben 17. April 2003 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 Zitieren
Patrick.Karre Geschrieben 17. April 2003 Geschrieben 17. April 2003 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 Zitieren
Schaf Geschrieben 17. April 2003 Geschrieben 17. April 2003 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 Zitieren
heipa Geschrieben 18. April 2003 Autor Geschrieben 18. April 2003 Danke für die Hilfe, ich denke damit kann ich was anfangen. Werde es am Dienstag direkt mal ausprobieren. mfg, patrick Zitieren
Empfohlene Beiträge
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.