Tabelle von Access aus ansprechen - Inhalt löschen/einfügen

Moderator: ModerationP

Tabelle von Access aus ansprechen - Inhalt löschen/einfügen

Beitragvon 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
aglak
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 48
Registriert: 29. Jun 2011, 15:21

Re: Tabelle von Access aus ansprechen - Inhalt löschen/einfü

Beitragvon theoS » 01. Aug 2019, 15:51

Das kann man ohne dein Template zu kennen nicht so recht sagen.
Hat deine Tabelle verbundene Zellen oder sonstige Ferkeleien?
Wenn nicht, könntest du auf die elende Markiererei verzichten und die Zellen direkt ansprechen.
Das ist mal eines.
Das Zweite wäre die Löscherei überhaupt? Wozu?
Word sieht den Begriff des "Word" ein wenig anders als wir das tun.
Der Satz
Video bietet eine leistungsstarke Möglichkeit - zur Unterstützung Ihres Standpunkts.

hat 12 "Words" wenn du sie zählst.
Wenn du sie dir einzeln ausgeben lässt (mit for each) kommst du nur auf 11 sichtbare(!) weil das 12. die Absatzmarke ist.

Code: Alles auswählen
Video
bietet
eine
leistungsstarke
Möglichkeit
-
zur
Unterstützung
Ihres
Standpunkts
.



In Tabellenzellen hast du 2 Unsichtbare Zeichen, das sind auch "Words", sprich du hast in der Tabelle 13 Words beim gleichen Satz.

Ein wenig arg undurchsichtig ist auch/überhaupt der Befehl
Code: Alles auswählen
' 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


du gehst zur Textmarke, markierst die ganze Zeile und löschst darin 2 "Words". Wieviele Zellen hat die Zeile? Was steht da schon drin?
Lad einfach mal dein Template hier hoch, dann kann man vielleicht erkennen wie man das anders lösen könnte. So ist das eigentlich nicht möglich.
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 4703
Registriert: 19. Apr 2008, 00:14

Re: Tabelle von Access aus ansprechen - Inhalt löschen/einfü

Beitragvon aglak » 08. Aug 2019, 10:41

Hi,
das Template enthält eigentlich nur eine Tabelle mit 4 Spalten und einer Kopfzeile:

KMED.JPG


es sind keine verbundenen Zellen enthalten, ab Zeile 2 soll gefüllt werden. Leider weiß ich zu Beginn des Übertrages nicht wie viele Zeilen benötigt werden, das ist jedes mal unterschiedlich. Im Text der eingefüllt werden soll sind Zahlen, Sonderzeichen usw enthalten.
Irgendwie bekomm ich das nicht hin....

Gruß aglak
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
aglak
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 48
Registriert: 29. Jun 2011, 15:21

Re: Tabelle von Access aus ansprechen - Inhalt löschen/einfü

Beitragvon theoS » 08. Aug 2019, 19:16

Du hast verbundene Zellen.
Zumindest sieht das so aus. Mach mal die Zellebegrenzungen sichtbar und die Steuerzeichen.
Oder du lädst mal ein Muster hoch
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 4703
Registriert: 19. Apr 2008, 00:14

Re: Tabelle von Access aus ansprechen - Inhalt löschen/einfü

Beitragvon DerHoepp » 09. Aug 2019, 10:25

Hallo,

prinzipiell würde ich so vorgehen, dass ich für jeden Record im Recordset der Word-Tabelle eine Tabellenzeile hinzufüge und die Informationen entsprechend einfüge. Warum da irgendwas gelöscht werden sollte, erschließt sich mir nicht. Im Prinzip also so:
Code: Alles auswählen
Sub testen()
    Dim cn As Object
    Dim rs As Object
    Set cn = CreateObject("ADODB.Connection")
    cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Daten\simpleDatenbank.accdb; Persist Security Info=False;"
    cn.Open
   
    Set rs = cn.Execute("SELECT * FROM EinzigeTabelle")
    rs.movefirst
    Dim i As Long
    Dim WdDoc As Object
    Set WdDoc = GetObject(, "Word.Application").Documents.Add("C:\Daten\MeineVorlage.dotx")
    For i = 0 To rs.Fields.Count - 1
        WdDoc.tables(1).Rows(1).Cells(i + 1) = rs.Fields(i).Name
        WdDoc.tables(1).Rows(2).Cells(i + 1) = rs.Fields(i).Value
    Next i
    rs.movenext
   
    Do While Not rs.EOF
        With WdDoc.tables(1).Rows.Add()
            For i = 0 To rs.Fields.Count - 1
                .Cells(i + 1) = rs.Fields(i).Value
            Next i
        End With
        rs.movenext
    Loop
End Sub


Viele Grüße
derHöpp
DerHoepp
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8139
Registriert: 14. Mai 2013, 11:08

Re: Tabelle von Access aus ansprechen - Inhalt löschen/einfü

Beitragvon theoS » 12. Aug 2019, 10:01

@höpp das geht, wenn keine verbundenen Zellen drin sind
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 4703
Registriert: 19. Apr 2008, 00:14

Re: Tabelle von Access aus ansprechen - Inhalt löschen/einfü

Beitragvon DerHoepp » 12. Aug 2019, 10:17

Hallo Theo,

aber das ist ja nur ein Problem in der Überschriftszeile. Und die ist in seinem Code ja vorausgefüllt. Nur in meinem Beispiel hab ich die Feldnamen als Tabellenüberschriften genutzt.

Viele Grüße
derHoepp
DerHoepp
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8139
Registriert: 14. Mai 2013, 11:08


Zurück zu Word Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste

cron