von aglak » 01. Aug 2019, 11:08
Hallo Ihr Lieben,
Vielleicht frage ich hier auch mal, an sich habe ich ein Access Problem, aber auch ein Problem in Word:
Ich möchte aus meiner Datenbank (Access) heraus ein vorhandenes Template in Word mittels Makro in VBA mit Datensätzen füllen. Die Daten sollen dort in eine Tabelle eingefügt werden.
Folgenden Code in VBA habe ich gefunden, geschrieben und angepasst:
- Code: Alles auswählen
Private Sub Befehl8_Click()
'Knopf Print to KMED
' Wordfile öffnen und Tabelle füllen, variabel viele Zeilen
Const Vorlage = "C:\Temp\test.docx"
Dim DocType As String
DocType = Me.ID_DocType
MsgBox (DocType)
Dim NeueZeile As Boolean
Dim dbs As DAO.Database
Dim rs As DAO.Recordset
Dim wdApp As Object ' Word.Application
Dim wdDoc As Object ' Word.Document
Const wdWord As Variant = 2 'Variablendeklaration für das löschen des Tabelleninhaltes der neu erstellen Tabellenzelle
'Const wdcharacter As Long = 1 'Variablendeklaration für das löschen des Tabelleninhaltes der neu erstellen Tabellenzelle
Const wdGoToBookmark As Long = -1 'Variablendeklaration für bookmark
Set dbs = CurrentDb
Set rs = dbs.OpenRecordset("SELECT * FROM qry_Checkpoints_fuer_Details WHERE DocType_ID =" & DocType) 'Variable &DocType wird durch die Suche (oben) übergeben
On Error Resume Next
Set wdApp = GetObject(, "Word.Application")
If wdApp Is Nothing Then Set wdApp = CreateObject("Word.Application")
On Error GoTo 0
wdApp.Visible = True ' zum testen
Set wdDoc = wdApp.Documents.Add(Vorlage)
While rs.EOF <> True
If NeueZeile Then
With wdApp.Selection
' In letzte Zeile positionieren, Zelle mit Textmarke Spalte1 löschen
.GoTo What:=wdGoToBookmark, Name:="Spalte1" 'gehe zu Tabellenstelle mit der Textmarke
.SelectRow ' Zeile Markieren
.Copy ' Zeile Kopieren
.Paste ' Zeile einfügen
.Delete Unit:=wdWord, Count:=2 ' Zeile leeren
' In letzte Zeile positionieren, Zelle mit Textmarke Spalte2 löschen
.GoTo What:=wdGoToBookmark, Name:="Spalte2" 'gehe zu Tabellenstelle mit der Textmarke
.SelectRow ' Zeile Markieren
.Delete Unit:=wdWord, Count:=2 ' Zelle leeren
' In letzte Zeile positionieren, Zelle mit Textmarke Spalte3 löschen
.GoTo What:=wdGoToBookmark, Name:="Spalte3" 'gehe zu Tabellenstelle mit der Textmarke
.SelectRow ' Zeile Markieren
.Delete Unit:=wdWord, Count:=2 ' Zelle leeren
End With
End If
wdDoc.Bookmarks("Spalte1").Range = rs!Topic
wdDoc.Bookmarks("Spalte2").Range = rs!SubTopic
wdDoc.Bookmarks("Spalte3").Range = rs!Description
'wdDoc.Bookmarks("Spalte4").Range = rs!DocTypeRelativeComment
NeueZeile = True
rs.MoveNext
Wend
'wdDoc.SaveAs "Speicherplatz"
'wdDoc.Close
'wdApp.Quit
Set wdDoc = Nothing
Set wdApp = Nothing
End Sub
Es funktioniert schon mal gar nicht ganz schlecht. Die Tabelle füllt sich.
Allerdings nicht ganz so wie geplant
Die Datensätze werden eingefügt, aber sobald ein Sonderzeichen, Zahl oder Satzzeichen enthalten ist wird die Zellen nicht mehr geleert, sondern es wird nur noch angehängt. Leider ist das sehr viel Text den ich übertragen muss, also komm ich um Satzzeichen nicht herum.
Ich habe es mit "wdCharacter" probiert, aber das klappt leider auch nicht. Es wird nur der erste Buchstabe gelöscht.
Eine leere Tabellenzeile einfügen klappt dann nicht mehr zum füllen, denke die Textmarken werden da nicht übertragen, oder?
Ich komm einfach nicht drauf.
Könnt ihr mir helfen? Wo liegt denn mein Fehler?
Ganz lieben Dank und Gruß
aglak
Hallo Ihr Lieben,
Vielleicht frage ich hier auch mal, an sich habe ich ein Access Problem, aber auch ein Problem in Word:
Ich möchte aus meiner Datenbank (Access) heraus ein vorhandenes Template in Word mittels Makro in VBA mit Datensätzen füllen. Die Daten sollen dort in eine Tabelle eingefügt werden.
Folgenden Code in VBA habe ich gefunden, geschrieben und angepasst:
[code]
Private Sub Befehl8_Click()
'Knopf Print to KMED
' Wordfile öffnen und Tabelle füllen, variabel viele Zeilen
Const Vorlage = "C:\Temp\test.docx"
Dim DocType As String
DocType = Me.ID_DocType
MsgBox (DocType)
Dim NeueZeile As Boolean
Dim dbs As DAO.Database
Dim rs As DAO.Recordset
Dim wdApp As Object ' Word.Application
Dim wdDoc As Object ' Word.Document
Const wdWord As Variant = 2 'Variablendeklaration für das löschen des Tabelleninhaltes der neu erstellen Tabellenzelle
'Const wdcharacter As Long = 1 'Variablendeklaration für das löschen des Tabelleninhaltes der neu erstellen Tabellenzelle
Const wdGoToBookmark As Long = -1 'Variablendeklaration für bookmark
Set dbs = CurrentDb
Set rs = dbs.OpenRecordset("SELECT * FROM qry_Checkpoints_fuer_Details WHERE DocType_ID =" & DocType) 'Variable &DocType wird durch die Suche (oben) übergeben
On Error Resume Next
Set wdApp = GetObject(, "Word.Application")
If wdApp Is Nothing Then Set wdApp = CreateObject("Word.Application")
On Error GoTo 0
wdApp.Visible = True ' zum testen
Set wdDoc = wdApp.Documents.Add(Vorlage)
While rs.EOF <> True
If NeueZeile Then
With wdApp.Selection
' In letzte Zeile positionieren, Zelle mit Textmarke Spalte1 löschen
.GoTo What:=wdGoToBookmark, Name:="Spalte1" 'gehe zu Tabellenstelle mit der Textmarke
.SelectRow ' Zeile Markieren
.Copy ' Zeile Kopieren
.Paste ' Zeile einfügen
.Delete Unit:=wdWord, Count:=2 ' Zeile leeren
' In letzte Zeile positionieren, Zelle mit Textmarke Spalte2 löschen
.GoTo What:=wdGoToBookmark, Name:="Spalte2" 'gehe zu Tabellenstelle mit der Textmarke
.SelectRow ' Zeile Markieren
.Delete Unit:=wdWord, Count:=2 ' Zelle leeren
' In letzte Zeile positionieren, Zelle mit Textmarke Spalte3 löschen
.GoTo What:=wdGoToBookmark, Name:="Spalte3" 'gehe zu Tabellenstelle mit der Textmarke
.SelectRow ' Zeile Markieren
.Delete Unit:=wdWord, Count:=2 ' Zelle leeren
End With
End If
wdDoc.Bookmarks("Spalte1").Range = rs!Topic
wdDoc.Bookmarks("Spalte2").Range = rs!SubTopic
wdDoc.Bookmarks("Spalte3").Range = rs!Description
'wdDoc.Bookmarks("Spalte4").Range = rs!DocTypeRelativeComment
NeueZeile = True
rs.MoveNext
Wend
'wdDoc.SaveAs "Speicherplatz"
'wdDoc.Close
'wdApp.Quit
Set wdDoc = Nothing
Set wdApp = Nothing
End Sub
[/code]
Es funktioniert schon mal gar nicht ganz schlecht. Die Tabelle füllt sich.
Allerdings nicht ganz so wie geplant :?
Die Datensätze werden eingefügt, aber sobald ein Sonderzeichen, Zahl oder Satzzeichen enthalten ist wird die Zellen nicht mehr geleert, sondern es wird nur noch angehängt. Leider ist das sehr viel Text den ich übertragen muss, also komm ich um Satzzeichen nicht herum.
Ich habe es mit "wdCharacter" probiert, aber das klappt leider auch nicht. Es wird nur der erste Buchstabe gelöscht.
Eine leere Tabellenzeile einfügen klappt dann nicht mehr zum füllen, denke die Textmarken werden da nicht übertragen, oder?
Ich komm einfach nicht drauf.
Könnt ihr mir helfen? Wo liegt denn mein Fehler?
Ganz lieben Dank und Gruß
aglak