Word Datei (Format 2007) mittels VBA Makro auslesen

  • Word

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von HelD007.

    Word Datei (Format 2007) mittels VBA Makro auslesen

    Hallo zusammen,
    folgende Problematik:

    Schritt 1:
    Ich versuche mit einem Makro in einer Access 2007 DB eine Word Datei zu öffnen um diese komplett auszulesen und innerhalb des Quellcodes dann weiter verarbeiten zu können. Ziel ist es einige der Inhalte in SQL Statements zu übernehmen um damit Abfragen auf die DB loszulassen.

    Schritt 2:
    Teilweise wird der Inhalt aus der Word Datei und natürlich die Ergebnisse der Abfragen im Anschluss in eine neue WordDatei geschrieben.

    Im Moment hänge ich am Öffnen der Word Datei. Ich habe álle nötigen Verweise hinzugefügt um die nötigen Funktionen nutzen zu können. In einigen Büchern habe ich Beispiele gefunden, doch beim Nachprogrammieren stellte ich fest, dass diese so nicht funkttionieren.

    Codebeispiel:
    Option Compare Database
    Dim word_application As New Word.Application
    Dim word_document As New Word.Document
    Sub Main()
    Set word_application = CreateObject("Word.Application")
    Set word_document = CreateObject("Word.Document")

    'diese Zeile wird im Beispiel so angegeben, doch funzt net; was ist bei diesem Aufruf falsch
    word_document.Document.Open FileName = "C:\KZU_Projekt\Import\Leitblatt.docx", ReadOnly = True
    'Fehlermeldung ==> Laufzeitfehler 438 Objekt unterstüzt diese Eigenschaft oder MEthode nicht!
    .document.open ==> damit kommt er net klar ... ist das Syntax einer früheren Version oder wieso geht das net?
    End Sub

    Ich dachte mir mit diesem Aufruf öffne ich ein Objekt in dass ich dann mittels schleife loop until EOF einfach die Word Datei durchgehe. Ich will auch nicht den kompletten Inhalt, sondern sehe vor die Word Datei mit Textmarken zu versehen, die ich dann einzeln nacheinander in das Word Objekt schreibe.

    Bin relativer Anfänger auf dem VBA Gebiet und würde mich über Beiträge echt freuen. Wer mir weiterhelfen kann, jede Hilfe ist willkommen!

    MfG


    HelD007

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „HelD007“ ()

    So müsste es funktionieren:

    Visual Basic-Quellcode

    1. Sub Main()
    2. Set word_application = CreateObject("Word.Application")
    3. Set word_document = word_application.Documents.Open(FileName:="C:\KZU_Projekt\Import\Leitblatt.docx", ReadOnly:=True)
    4. End Sub


    Fehlermeldung ==> Laufzeitfehler 438 Objekt unterstüzt diese Eigenschaft oder MEthode nicht!

    "Document" ist kein Member von "Word.Document", da es selbst ein Dokument ist. Übrigens muss es "Documents.Open" und nicht "Document.Open" heißen. Das ist in der 2007-Version genauso wie in den älteren Versionen.

    Außerdem muss man ":=" schreiben, wenn man benannte Argumente einer Funktion einem Wert zuweist. (also ...Open(FileName:=...)

    problem beim öffnen der Access DB connection

    altes problem gelöst danke für den Tipp !! super Sache .. aber nun beim öffnen der db connection zu Access 2007 DB kommt VB Error Code 446 Object unterstützt benannte Argumente nicht?!? woran liegt das jetzt, meine Vermutung ist auf jeden Fall der Connection String,habe hier auch schon Lösungen gefunden, doch hinbekommen habe ich das trozdem net ...
    For allem: das Macro ist in der DB und wird auch aus der DB gestartet... muss ich dann trotzdem ne Connection aufbauen? oder gibt es sowas wie active database ... HELP .... und vor allem Danke im Vorraus!!!

    Folgend der Code:

    'Variablen für db connection with ADO
    Dim ADO_db_connect As New ADODB.Connection
    Dim ADO_db_command As New ADODB.Command
    Dim ADO_db_recordset As New ADODB.Recordset
    Dim recordset_affectedRows As Long
    Dim str_connection As String
    Dim strProvider As String
    Dim strDataSource As String
    Dim records_affected As Long

    'sql statements prepare
    Dim sql_1 As String ' Verzeichnis der Rückläufe
    sql_1 = "SELECT R.Nr, R.REF, R.Land, R.Ort, R.ANR & ' ' & R.AP as Ansprechpartner, R.F, R.Antwort, R.Memo, R.G1, R.G2, R.G as 'A' FROM R WHERE R.[TN-Nr] = ' + TN_Nr + ' And R.[ZU-Nr] = ' + ZU_Nr + ' ORDER BY R.Nr Asc"

    'OLE DB Treiber
    'str_connection = "Provider='Microsoft.Jet.OLEDB.4.0';' &_ 'Data source='C:\KZU_Projekt\KZU_DB_neu.accdb'"
    'strProvider = "Provider=Microsoft.Jet.OLEDB.4.0;"
    'strDataSource = "Data source=C:\KZU_Projekt\KZU_DB_neu.accdb"

    'Microsoft MS Access 2007 Treiber
    strProvider = "Provider=Microsoft.ACE.OLEDB.12.0;"
    strDataSource = "Data source=C:\KZU_Projekt\KZU_DB_neu.accdb"

    str_connection = strProvider + strDataSource
    On Error GoTo AdoError ' Full Error Handling which traverses Connection object
    On Error GoTo AdoErrorLite ' Don't assume that we have a connection object

    'Lösung 1 wird genutzt
    ADO_db_connect.ActiveConnection = str_connection
    ADO_db_connect.Open ' hier beim öffnen bricht er ab und geht zum error handle
    ADO_db_command.CommandText = sql_1
    ADO_db_command.Prepared = True
    Set ADO_db_recordset = ADO_db_command.Execute(records_affected, , Options = adCmdTable)

    'Lösung 2
    'ADO_db_connect.ActiveConnection = str_connection
    'ADO_db_command.CommandText = sql_1
    'ADO_db_command.Prepared = True
    'ADO_db_recordset.Open ADO_db_command.CommandText, str_connection

    DO_db_recordset.Close
    ADO_db_connect.Close
    ADO_db_connect.ActiveConnection = ""

    'leeren der DB Objects connection,command & recordset
    Done:
    Set ADO_db_recordset = Nothing
    Set ADO_db_command = Nothing
    Set ADO_db_connect = Nothing
    ADO_db_connect.Errors.Clear
    Exit Sub


    ' Error Händler
    '
    ' ADO DB Connection (=AdoError)& Ado DB Recordset (=AdoErrorLite)
    '
    ' Error Handling Variables
    Dim errLoop As Error
    Dim strTmp As String
    Dim j As Integer
    Dim Errs1 As Errors
    '
    ' Connection Object Methods
    AdoError:
    j = 1
    On Error Resume Next
    ' Enumerate Errors collection and display properties of
    ' each Error object (if Errors Collection is filled out)
    Set Errs1 = ADO_db_connect.Errors
    For Each errLoop In Errs1
    With errLoop
    strTmp = strTmp & vbCrLf & "ADO Error # " & j & ":"
    strTmp = strTmp & vbCrLf & " ADO Error # " & .Number
    strTmp = strTmp & vbCrLf & " Description " & .Description
    strTmp = strTmp & vbCrLf & " Source " & .Source
    j = j + 1
    End With
    Next
    '
    ' Recordset Object Methods
    AdoErrorLite:
    ' Get VB Error Object's information
    strTmp = strTmp & vbCrLf & "VB Error # " & Str(Err.Number)
    strTmp = strTmp & vbCrLf & " Generated by " & Err.Source
    strTmp = strTmp & vbCrLf & " Description " & Err.Description
    MsgBox strTmp
    ' Clean up gracefully without risking infinite loop in error handler
    On Error GoTo 0
    GoTo Done

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „HelD007“ ()