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: Daten aus VBA in Feldfunktion übergeben (docvariable?)

Empfohlene Antworten

Veröffentlicht

Hallo, ich habe ein Problem, an dem ich jetzt schon seit 2 Tagen sitze:

Ich möchte einen Word-Serienbrief über VBA programmieren. Die Daten kommen aus einer Excel-Tabelle und müssen zum Teil noch modifiziert werden. Einige Daten möchte ich in dem Word-Dokument in Feldfunktionen weiterverwenden, und da fängt mein Problem an.

Meine Idee war, dass ich die Übergabe der Daten in VBA mit der Methode ActiveDokument.Variables.Value einleite und diese dann mit den docvariablen im Dokument übernehme.

Das ganze funktioniet leider so wie ich es geschrieben habe nicht, die Variavle wird zwar gefüllt, aber nicht in das Dokument übergeben.

Der Befehl ActiveDocument.MailMerge.execute macht m. M. die übertragung zunichte.

Hier der Code:

Public Sub Test4()

Dim LetzterRec As Long

Dim var1, var2 As Integer

Dim besch_finanzamt As String

ActiveDocument.MailMerge.OpenDataSource

Name:="C:\Users\tom\Desktop\VBA\Stb_u_Stud_ausweis.xls", _ SQLStatement:="SELECT * FROM `WordBriefeDrucken__Arbeitstabel$`"

ActiveDocument.MailMerge.DataSource.ActiveRecord = wdLastRecord LetzterRec = Word.ActiveDocument.MailMerge.DataSource.ActiveRecord

ActiveDocument.MailMerge.DataSource.ActiveRecord = wdFirstRecord

With ActiveDocument.MailMerge

.DataSource.ActiveRecord = wdFirstRecord

Do

.Destination = wdSendToNewDocument

.SuppressBlankLines = True

With .DataSource

.FirstRecord = .ActiveRecord

.LastRecord = .ActiveRecord

var1 = .DataFields("VersandFinanzbeschBetrag").Value

var2 = .DataFields("VersandFinanzbesch").Value

End With

If var1 <> 0 And var2 = -1 Then

ActiveDocument.Variables("besch_finanzamt").Value = "ja"

Else

ActiveDocument.Variables("besch_finanzamt").Value = "nein"

End If

.Execute

ActiveDocument.Fields.Update

If .DataSource.ActiveRecord < LetzterRec Then

.DataSource.ActiveRecord = wdNextRecord

Else

Exit Do

End If

Loop

End With

End Sub

Es wäre supernett, wenn mir jemand weiterhelfen könnte.

Vielen Danke schon mal!

Thomas

Ich habe mittlerweile die Antwort, welche ich hier posten möchte:

1) in VBA - damit es echt funktiniert - muss man dummerweise immer noch beim Deklarieren jeder Var EINZELN den Typ zuweisen - ansonsten sind die richtige Eregebnisse eher rein zufällig.

2) Zum Glück hast Du mit "With ActiveDocument.MailMerge" die folgenden Befehle bezogen auf "MailMerge" Dinge an das "Richtige" ActiveDocument angehängt - sonst wäre hier schon was - spätestens nach Erzeugung des ersten "BRIEFES" was schiefgegangen - ABER - die weiteren Befehle innerhalb der With-Konstruktion mit "ActiveDocument....." beziehen sich nur beim ersten Mal auf die Serienbrief-Vorlage, ab dann immer auf den jeweils gerade erstellen Serien"BRIEF" da dieser dann das "activeDocument" ist.

Also wird mit "ActiveDocument.Variables("besch_finanzamt").Value = "ja" ...... und "ActiveDocument.Fields.Update" nicht die Serienbrief-Vorlage versorgt und aktualisiert - sondern der jeweils erstellte Brief.

An den nächsten neuen "BRIEF" wird dadurch immer das Ergebnis des ersten geliefert.

Deshalb muss man die Seriendruckvorlage permantent aktivieren -

damit diese immer das "activeDocument" ist.

Unten habe ich Dir den Code beigefügt, der bei mir funktioniert.

Public Sub Test4_b()

Dim LetzterRec As Long

'Dim var1, var2 As Integer <<<--------------------------------------- Geandert

Dim var1 as Integer, var2 As Integer '<<<-------------------------<< in

Dim besch_finanzamt As String

Dim MMDoc As Document '<<<--------------------------------------- neu

Set MMDoc = ActiveDocument '<<<--------------------------------------- neu

ActiveDocument.MailMerge.OpenDataSource Name:="Y:\0_Y_MOM\Stb_u_Stud_ausweis.xls", _

SQLStatement:="SELECT * FROM `WordBriefeDrucken__Arbeitstabel$`"

ActiveDocument.MailMerge.DataSource.ActiveRecord = wdLastRecord

LetzterRec = Word.ActiveDocument.MailMerge.DataSource.ActiveRecord

ActiveDocument.MailMerge.DataSource.ActiveRecord = wdFirstRecord

With ActiveDocument.MailMerge

.DataSource.ActiveRecord = wdFirstRecord

Do

.Destination = wdSendToNewDocument

.SuppressBlankLines = True

With .DataSource

.FirstRecord = .ActiveRecord

.LastRecord = .ActiveRecord

var1 = .DataFields("VersandFinanzbeschBetrag").Value

var2 = .DataFields("VersandFinanzbesch").Value

End With

MMDoc.Activate '<<<--------------------------------------- neu

If var1 <> 0 And var2 = -1 Then

ActiveDocument.Variables("besch_finanzamt").Value = "ja"

Else

ActiveDocument.Variables("besch_finanzamt").Value = "nein"

End If

ActiveDocument.Fields.Update

.Execute

If .DataSource.ActiveRecord < LetzterRec Then

.DataSource.ActiveRecord = wdNextRecord

Else

Exit Do

End If

Loop

End With

End Sub

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.