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,

ich will jetzt die Werte des Recordsets, auf ein Array zuweisen.

Z.B.:

rs as recordset

a = array

rs[Name] = =a[1] ??????

Wie kann ich das machen?

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

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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