2016-05-03 19 views
1

Ich versuche, Tabellen in einer Word-Dokumentvorlage aus meiner Access-Datenbank zu erstellen.Erstellen Sie Tabelle in Worddokument aus Zugriff mit VBA

Dieses Codebeispiel kann problemlos von Word ausgeführt werden und erstellt Tabellen nach Bedarf. Ich frage mich, ob es möglich ist, diesen Code von Access auszuführen und auf ein bestimmtes Word-Dokument zu zeigen, in dem die Tabellen erstellt werden.

Dim numberOfTables As Integer 
Dim iCount As Integer 

numberOfTables = InputBox("How many tables to make?", "Tables") 

For iCount = 0 To numberOfTables - 1 

    ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=2, NumColumns:= _ 
     3, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _ 
     wdAutoFitFixed 
    With Selection.Tables(1) 
     If .Style <> "Table Grid" Then 
      .Style = "Table Grid" 
     End If 
     .ApplyStyleHeadingRows = True 
     .ApplyStyleLastRow = False 
     .ApplyStyleFirstColumn = True 
     .ApplyStyleLastColumn = False 
     '.ApplyStyleRowBands = True 'Office 2010 
     '.ApplyStyleColumnBands = False 'Office 2007 
    End With 

    Selection.EndKey Unit:=wdStory 
    Selection.TypeParagraph 

Next iCount 
+1

Sie müssen sich fragen, wie 'ActiveDocument' und' Selection' von außen erstellt werden können. Referenzieren Sie das Word-Objektmodell? –

+0

Ja, es ist möglich. Aber Sie müssen wissen: 1) Nehmen Sie an, dass Word bereits läuft? 2) Gehen Sie davon aus, dass das Zieldokument bereits geöffnet ist? 3) Wenn das Dokument nicht geöffnet ist, wie finde ich die Datei (Pfad) zum Dokument, um es zu öffnen? 4) Und wenn das Dokument geöffnet ist, wie finde ich heraus, wo die Tabelle eingefügt werden sollte? Wir können Ihnen nicht ohne vollständige Information helfen ... –

+0

1) Word läuft noch nicht. 2) Das Zieldokument ist noch nicht geöffnet. 3) Der Dateipfad wird auf meinem C-Laufwerk zB sein. C: \ Datenbank \ Vorlage.docx. 4) Ich war unter der Annahme, dass das Bereichsobjekt verwendet werden könnte, um festzulegen, wo die Tabelle eingefügt werden soll. –

Antwort

2

Sie müssen zuerst eine neue Instanz von Word von Access öffnen. Dies wird durch den folgenden Befehl ausgeführt wird:

Set wrdApp = CreateObject("Word.Application") 

Dann machen sie sichtbar und ein Dokument hinzufügen möchten, verwenden Sie das Objekt von diesem Punkt an:

wrdApp.Visible = True 
Set myDoc = wrdApp.Documents.Add 'Here you should also keep the new document as an object so you can directly refer to it 

Oder wenn Sie eine Vorlage verwenden, die Sie benötigen um es zu öffnen, statt:

wrdApp.Visible = True 
Set myDoc = wrdApp.Documents.Open ("C:\database\template.docx") 

Und dann kommt Ihr Code, den Sie entsprechend dem oben ändern müssen:

For iCount = 0 To numberOfTables - 1 

    myDoc.Tables.Add Range:=Selection.Range, NumRows:=2, NumColumns:= _ 
     3, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _ 
     wdAutoFitFixed 
    With myDoc.ActiveWindow.Selection.Tables(1) 
'Note here that for the Selection object you need to refer to the active window 
     If .Style <> "Table Grid" Then 
      .Style = "Table Grid" 
     End If 
     .ApplyStyleHeadingRows = True 
     .ApplyStyleLastRow = False 
     .ApplyStyleFirstColumn = True 
     .ApplyStyleLastColumn = False 
     '.ApplyStyleRowBands = True 'Office 2010 
     '.ApplyStyleColumnBands = False 'Office 2007 
    End With 

    myDoc.ActiveWindow.Selection.EndKey Unit:=wdStory 
    myDoc.ActiveWindow.Selection.TypeParagraph 

Next iCount 

Dies sollte Ihnen den Anfang machen.

+0

Entschuldigung für die späte Antwort. Das scheint genau das zu sein, was ich gesucht habe, aber das Dokument wird bereits in einem Ordner mit Dateipfad abgelegt. C: \ database \ template.docx –

+0

In diesem Fall müssen Sie 'Set myDoc = wrdApp.Documents.Open' verwenden. Dann möchten Sie 'myDoc.SaveAs', um die Vorlage nicht zu überschreiben. – ib11

+0

Ich bekomme einen Fehler in der zweiten Zeile 'myDoc.Tables.Add Range ...' Laufzeitfehler 424 Objekt erforderlich. Ich bin mir nicht sicher, was mir fehlt –

Verwandte Themen