Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hi,

also, ich soll für einen Serienbrief in Word ein neues Feld erzeugen, welches sich aus schon vorhandenen Feldern des Serienbriefes zusammensetzt. So braucht z.B. der User nur noch 1 Feld einfügen, und kann sich Arbeit ersparen.

Die Datenbank ist in Access, und die Form des zu erstellenden Feldes für den Serienbrief ist vorgegeben.

Nun brauch ich eine Funktion, um aus der besteheden Tabelle die Spalten herauszuholen und zu in der vorgegebenen Form wieder auszugeben.

Ich habe dabei an ein Array und dann an ein SQL Komando an die Datenbank gedacht, die mir die benötigten Daten zusammensetzt. Dann will ich die Daten des SQL dem Array übergeben, und so mein benötigten Felder bekommen.

Wie kann ich das am besten anstellen?:(

Geschrieben

Oh oh....wenn du davon keine Ahnung hast, dann solltest dir wohl zuerst mal ein anstaendiges Word VBA Buch kaufen in dem auch sowas beschrieben ist. Das ganze geht halt nicht gerade in zwei Zeilen....dazu muss man sich schon n bissl naeher damit beschaeftigen.

Goos

Geschrieben

Hi,

ich habe eben in VBA noch nicht besonderlich viel gemacht. Eigentlich garnichts. Nur etwas in VB.

Hat nicht jemand einen kleinen Tipp für mich? Ich kese mich gerade in VBA etrwas ein.

:(

Geschrieben

Hi!

Ich habe hier ein Beispiel, wo ich Daten aus Access in ein Worddoc schreibe. Veilleicht hilft es Dir.

-------------------------------------------------------------------------------

Dim WordObj As Object

Dim rs1 As Recordset

Dim SQL as String

Dim DOC As String

Dim bolWord As Boolean

Dim strPath As String

SQL = "SELECT DEINE DATEN"

'Recordset öffnen

Set rs1 = CurrentDb.OpenRecordset(SQL, dbOpenForwardOnly)

'Pfad der Datei ermitteln

strPath = DLookup("ProgPath", "z_Settings", "[iD] = 1")

'Word öffnen

Set WordObj = GetObject(, "Word.Application")

If Err.Number <> 0 Then

Err.Clear

Set WordObj = CreateObject("Word.Application")

bolWord = True

Else

WordObj.Activate

bolWord = False

End If

If IsNull(rs1![WSDAT]) Then AGDAT = Format(Now, "Short Date") Else AGDAT = rs1![WSDAT]

AUFTP = rs1![AUFTP]

KENNZ = rs1![KENNZ]

FZART = rs1![FZART]

SCHAD = fktZeichenWechsel(rs1![sACHS], Chr(10), "", "N", True)

NOTIZ = fktZeichenWechsel(rs1![MATERIAL], Chr(10), "", "N", True)

FKENN = fktZeichenWechsel(KENNZ, " ", "_", "N", True)

'Dokument öffnen ( Vorlage )

WordObj.Documents.Open FileName:=strPath & "\SYS\Datei.doc"

WordObj.Visible = True

With WordObj.ActiveDocument

.Formfields("FELD1").Result = rs1!Feld1

.Formfields("FELD2").Result = rs1!Feld2

.Formfields("FELD3").Result = rs1!Feld3

.Formfields("FELD4").Result = rs1!Feld4

.Formfields("FELD5").Result = rs1!Feld5

.Formfields("FELD6").Result = rs1!Feld6

.Formfields("FELD7").Result = rs1!Feld7

End With

'speichern

WordObj.ActiveDocument.SaveAs FileName:=strPath & "Datei.doc"

WordObj.ActiveDocument.Save

WordObj.ActiveDocument.Close

If bolWord Then WordObj.Application.Quit

Set WordObj = Nothing

rs1.Close

Set rs1 = Nothing

------------------------------------------------------------------------

Das gilt leider nur für einen DS. bei einem Serienbrief müsstes Du eine Schleife durchlaufen und immer ein neues Dokument öffnen. Ich ho

ffe es Hilft Dir weiter.

Gruss

Geschrieben
Original geschrieben von Mercutio

If IsNull(rs1![WSDAT]) Then AGDAT = Format(Now, "Short Date") Else AGDAT = rs1![WSDAT]

AUFTP = rs1![AUFTP]

KENNZ = rs1![KENNZ]

FZART = rs1![FZART]

SCHAD = fktZeichenWechsel(rs1![sACHS], Chr(10), "", "N", True)

NOTIZ = fktZeichenWechsel(rs1![MATERIAL], Chr(10), "", "N", True)

FKENN = fktZeichenWechsel(KENNZ, " ", "_", "N", True)

Den Teil kannst Du weglassen, da schreibe ich die Werte des Recordsets nur in Variablen.

Und die Pfadangabe kannst Du auch einfach direkt zuweisen.

zB. strPath = "C:\Test\Test.doc"

das hatte ich vorhin vergessen zu sagen.

Gruss

Geschrieben

Hi!

Andesderum gehts:

a[0] = rs!Name

a[1] = rs!Vorname

a[2] = rs!Anrede

Allerdings würde ich das Array so definieren:

Dim a(10) as String

Die 10 steht in dem Fall für die Anzahl der Felder im Array. Der Typ des Arrays ist dann ein String.

Gruss

Geschrieben

Aus der Hilfe:

"Ein Recordset-Objekt stellt die Datensätze in einer Basistabelle oder die Datensätze, die das Ergebnis einer Abfrage sind, dar."

Ein Recordset ist quasi ein Abbild einer Tabelle. Du kannst durch eine Abrage oder ein SQL - Statement auch diverse Filter setzen und Dir nur die Datensätze holen , die Du haben möchtest.

Ausserdem kannst Du damit neue DS anfügen, DS editiern und löschen.

In der Hilfe ist alles nochmal ausführlich erklärt.

gruss

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...