2017-04-06 8 views
1

Ms Word-Datenbankfeld fügt die Ergebnisse einer Datenbankabfrage in einer Word-Tabelle ein.Verwenden von MS Access und VBA zum Aktualisieren (Feldcodes: Datenbank) Feld in Ms Word-Dokument

Ich möchte eine Tabelle in ms Wort mit VBA füllen, habe ich bereits mit VBA MsAccess & MsWord Lesezeichen, die Vorlage aus den Daten machen das Dokument sehr schwierig zu pflegen. Ich fand, dass MSword die Option Datenbank einfügen enthält und Ihnen erlaubt, die Daten in msaccess zu aktualisieren und die Vorformatierung während Aktualisierungen beizubehalten. Die folgenden Datenbankfeld Code ergibt sich aus einer Abfrage aus meiner Access-Datenbank über ODBC den Datenbank-Befehl:

{DATABASE \ d "C: \ Eigene Datenquellen \ World.odc Um zu testen," \ c "Provider = MSDASQL.1; Persist Sicherheitsinformation = True; Erweitert Eigenschaften = \" DSN = MS Access-Datenbank; DBQ = H: \ CIP BUCH \ CIP2.accdb; DefaultDir = H: \ CIP BOOK; DriverId = 25; FIL = MS Zugriff; MaxBufferSize = 2048; Pagetimeout = 5; \ "; Initial Catalog = H: \ CIP BOOK \ CIP2.accdb" \ s „SELECT Description, TA, Entry Title, 012.326.VON qryTransactions ExtendedWordFill_test WHERE ((Project_id = 'PCP13ZOOA06'))“\ l "26" \ b "191" \ h * MERGEFORMAT }

Zuerst meine wdFieldDatabase haben Fields (Index), wobei Index ist die Indexnummer (Feldobjekt). Die Indexnummer stellt die Position des Feldes in der Auswahl, Bereich oder Dokument

Zweitens finde ich eine Fields.Add Methode (Word) Dieses Beispiel, wenn ein Feld ListenNr

Selection.Collapse Direction:=wdCollapseEnd 
ActiveDocument.Fields.Add Range:=Selection.Range, _ 
Type:=**wdFieldListNum**, Text:="\s 3" 

hinzufügen Was ich want ist tu update mit VBA der Code in (Feld codes: Datenbankfeld) Basis auf dem Index Speicherort und ändern Sie die (Project_id = 'PCP13ZOOA06). Andere Alternative kann das Feld Datenbank in bestimmten Bereich hinzufügen, Speicherort des Dokuments mit dem Erstellen des Codes in VBA. Ich möchte dies vom Zugriff aus verwalten, die Idee ist es, Statusberichte mit Kostenlisten für mehr als 2oo Projekte zu erstellen.

Field codes: Database field

Antwort

1

Ich kann es jetzt nicht testen, aber würde für Sie nicht so etwas wie diese Arbeit?

Option Explicit 

Public Sub UpdateDatabaseField() 
    Dim fldTarget As Field: Set fldTarget = ActiveDocument.Fields(1) ' TODO: Find your field based on your knowledge of your document 
    Dim strProjectIdNew As String: strProjectIdNew = "123456" ' TODO: Determine new project code 

    Dim strCodeOld As String: strCodeOld = fldTarget.Code.Text 
    Dim ixBegin As Long: ixBegin = InStr(1, strCodeOld, "Project_id") + Len("Project_id") 
    Dim ixEnd As Long: ixEnd = InStr(ixBegin, strCodeOld, ")") 
    Dim strCodeNew As String: strCodeNew = Left(strCodeOld, ixBegin) & "='" & strProjectIdNew & "'" & Mid(strCodeOld, ixEnd) 
    fldTarget.Code.Text = strCodeNew 
End Sub 

Der endgültige Code:

Public Sub UpdateDatabaseField() 
Dim fldTarget As Field: Set fldTarget = ActiveDocument.Fields(1) ' TODO: Find your field based on your knowledge of your document 
Dim strProjectIdNew As String: strProjectIdNew = "PCP13ZOOA08" ' TODO: Determine new project code 

Dim strCodeOld As String: strCodeOld = fldTarget.Code.Text 
Dim ixBegin As Long: ixBegin = InStr(1, strCodeOld, "Project_id") + Len("Project_id") - 0 
Dim ixEnd As Long: ixEnd = InStr(ixBegin, strCodeOld, ")") 
Dim strCodeNew As String: strCodeNew = Left(strCodeOld, ixBegin) & "='" & strProjectIdNew & "'" & Mid(strCodeOld, ixEnd) 
fldTarget.Code.Text = strCodeNew 
ActiveDocument.Fields(1).Update 

End Sub

+0

ist Arbeit, ich ändern nur die Len ("project_id") - 1 bis Len ("project_id") - 0 –