none
Office2010 VBA: Datenbank erstellen in MS-Word RRS feed

  • Frage

  • Hallo Forum,

    Ich habe viele Dokumente in MS-Word 97-Dokument , die ich nun nach MS-Word2010 konvertieren muss. Es sind etliche Makros vorhanden. Eins davon erstellt per VBA eine DAO-Datenbank. Das bekomme ich aber unter Word2010 nicht hin.

    Folgenden Code habe ich schon zum laufen gebracht...

     
    Sub DB_Erstellen()
        Dim Db As Database
        Dim DBFile As String
        Dim Td As TableDef
    
        'Speicherort der DB
        DBFile = "D:\Export.mdb"
        'Die DB erzeugen
        Set Db = Workspaces(0).CreateDatabase( _
           DBFile, _
           dbLangGeneral, _
           dbEncrypt + dbVersion40)
        
        Set Td = Db.CreateTableDef("Export")
        'Datenfelder zur Tabelle hinzufügen
        With Td
            .Fields.Append .CreateField("Nr", dbInteger, 4)
            .Fields.Append .CreateField("Phase1", dbText, 50)
            .Fields.Append .CreateField("Phase2", dbText, 50)
            .Fields.Append .CreateField("Phase3", dbText, 50)
            .Fields.Append .CreateField("Phase4", dbText, 50)
            .Fields.Append .CreateField("Phase5", dbText, 50)
            .Fields.Append .CreateField("Phase6", dbText, 50)
            .Fields.Append .CreateField("Datum", dbDate)
        End With
        'Td.Fields("Nr").AllowZeroLength = True
        'Td.Fields("Nr").Attributes dbAutoIncrField
        
        Db.TableDefs.Append Td
        
        'DB schließen
        Db.Close
    
    End Sub
    

    Leider bekomme ich es nicht hin, für die Felder die Eigenschaft .AllowZeroLength auf True zu setzen und für das Feld Nr das Attribut dbAutoIncrField...

    Die MS-Hilfe dazu ist auch sehr mager....

    Hat vielleicht jemand einen Tipp für mich, wie man so etwas macht??

    Lg Micha

    Dienstag, 27. Oktober 2015 23:05

Antworten

  •  Set fld = Td.CreateField("Phase1", dbInteger, 4) ' und damit lässt sich auch die Eigenschaft setzen: fld.Attributes dbAutoIncrField

    ergibt "unzulässige Verwendung einer Eigenschaft"

    Das muss so aussehen:

        Set fldkey = Td.CreateField("nrKey", dbLong, 4)
        fldkey.Attributes = FieldAttributeEnum.dbAutoIncrField + FieldAttributeEnum.dbFixedField
    

    Das geht in einer Tabelle aber nur einmal, da dies ein Schlüsselfeld mit einem Autowert ist.

    Dann ist es wichtig, dass der typ dbLong ist sonst funktioniert das ebenfalls nicht.

    • Als Antwort markiert MKnost Mittwoch, 28. Oktober 2015 16:59
    Mittwoch, 28. Oktober 2015 14:00

Alle Antworten

  • Hallo Micha,

    das sollte auch in aktuellen Office Versionen funktionieren.

    Entscheidend bei Dir ist aber eigentlich Access bzw. die DAO Version.

    Du hast ja sicher in den VBA-Verweisen den Verweis auf DAO3.xx eingetragen.

    Probiere mal folgendes, damit ist gewährleistet, dass Du das richtige Field Objekt erzeugst:

    Public Sub DbErzeugen()
      Dim Db As Database
        Dim DBFile As String
        Dim Td As TableDef
        Dim fld As DAO.Field ' Das ist wichtig
    
        'Speicherort der DB
        DBFile = "d:\Export.mdb"
        'Die DB erzeugen
        Set Db = Workspaces(0).CreateDatabase( _
           DBFile, _
           dbLangGeneral, _
           dbEncrypt + dbVersion40)
        
        Set Td = Db.CreateTableDef("Export")
        
        'Zunächst ein DAO Field erzeugen
        Set fld = Td.CreateField("Phase1", dbText, 4)
        ' und damit lässt sich auch die Eigenschaft setzen:
        fld.AllowZeroLength = True
        
        Td.Fields.Append fld
        Db.TableDefs.Append Td
        Db.Close
    End Sub
    
    
    

    Grüße

    Roland

    Mittwoch, 28. Oktober 2015 09:07
  • Hallo Roland, 

    Ich nutze Office 2010 Pro Plus und habe als Verweis "Microsoft Office 14.0 Access database engine object library" gesetzt, da bei der Auswahl von DAO3.6 eine Fehlermeldung erscheint ("Fehler bei Laden externer DLL").

    Das mit AllowZeroLength klappt, wie bekomme ich jetzt aber die dbAutoIncrField gesetzt? Das hab ich noch nicht hinbekommen....

     Set fld = Td.CreateField("Phase1", dbInteger, 4)
        ' und damit lässt sich auch die Eigenschaft setzen:
        fld.Attributes dbAutoIncrField
    ergibt "unzulässige Verwendung einer Eigenschaft"

    Mittwoch, 28. Oktober 2015 12:35
  • Hallo Roland, 

    Ich nutze Office 2010 Pro Plus und habe als Verweis "Microsoft Office 14.0 Access database engine object library" gesetzt, da bei der Auswahl von DAO3.6 eine Fehlermeldung erscheint ("Fehler bei Laden externer DLL").

    Dann stimmt etwas mit Deiner Office Installation nicht. Du brauchst für dieses Field Objekt unbedingt den Verweis auf DAO.

    Im Word gibt es auch ein Field Objekt, das ist aber nicht mit dem Field Objekt der DAO zu verwechseln.

    Daher die Declaration:

    Dim fld As DAO.Field '
    Das dürfte bei Dir ohne den Verweis auf DAO doch eigentlich gar nicht funktioniert haben!
     
    Mittwoch, 28. Oktober 2015 13:20
  •  Set fld = Td.CreateField("Phase1", dbInteger, 4) ' und damit lässt sich auch die Eigenschaft setzen: fld.Attributes dbAutoIncrField

    ergibt "unzulässige Verwendung einer Eigenschaft"

    Das muss so aussehen:

        Set fldkey = Td.CreateField("nrKey", dbLong, 4)
        fldkey.Attributes = FieldAttributeEnum.dbAutoIncrField + FieldAttributeEnum.dbFixedField
    

    Das geht in einer Tabelle aber nur einmal, da dies ein Schlüsselfeld mit einem Autowert ist.

    Dann ist es wichtig, dass der typ dbLong ist sonst funktioniert das ebenfalls nicht.

    • Als Antwort markiert MKnost Mittwoch, 28. Oktober 2015 16:59
    Mittwoch, 28. Oktober 2015 14:00
  • Hi Roland, 

    Danke! Das wars... so gehts nun. Schade, dass die Hilfe da nicht mehr hergibt.

    Mit dem Verweis auf dao3.6 gehts leider auch nach Neuinstallation nicht. Beim Googlen bin ich auf einige Hinweise gestoßen, dass die Library in der offic14.0 database engine integriert sein soll... wie auch immer.

    Klappt alles, danke!

    lg Micha

    Mittwoch, 28. Oktober 2015 17:03