Anzeige
Archiv - Navigation
268to272
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
268to272
268to272
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Felder Definieren für Access-Export

Felder Definieren für Access-Export
17.06.2003 13:42:36
Sven
Moin Moin !

Ich habe folgendes Problem :

Ich möchte aus Excel heraus 15 Tabellenblätter als Tabellen nach Access transferieren. Einzelnd funktioniert das wunderbar. Damit ich aber nicht für jedes Tabellenblatt den Export neuschreiben muss, habe ich mir gedacht das ganze dynamisch zu gestalten, d.h. ich lese erst in eine "Meta Daten Tabelle" die Anzahl der Zeilen, Spalten und die Feldnamen, sowie die Feldtypen ein.

Wenn ich jetzt versuche aus diesen Informationen die einzelnen Felder zu generieren, dann läuft

dim feld() as field

blablabla

Set Feld(1) = .CreateField(Range("B2"), dbText, 110)

auf die Fehlermeldung : Index Ausserhalb des gültigen Bereichs !

Was mache ich verkehrt ?

Vielen Dank !

Gruß

Sven

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: Felder Definieren für Access-Export
17.06.2003 13:47:41
RAnton

Hallo Sven

wo setzt du denn die Felddimension fest.

Es fehlt sowas wie

ReDim Feld(2)....für 3 Feldelemente


Gruß
RAnton

Re: Felder Definieren für Access-Export
17.06.2003 13:50:41
Sven

Hallo Anton !

Das ist eine gute Frage ... kann ich bei

ReDim Feld(2) für die 2 eine Variable einsetzen ?

und wo führe ich dieses ReDim denn an ?

Danke Schonmal !
Gruß

Sven

Re: Felder Definieren für Access-Export
17.06.2003 13:52:20
RAnton

Hallo

also das ReDim kannst du überall im Code einfügen, wo das Feld bekannt ist und du kannst natürlich eine Variable dazu benutzen.

Viel Spaß

Gruß
RAnton

Re: Felder Definieren für Access-Export
17.06.2003 14:10:10
Sven

So ... ich habe getestet ... aber sieh mal bitte selbst :


Public Sub Datenbank_und_Tabelle_erzeugen()  

  Dim Spalten, zeilen As Variant

    Dim spalte, zeile As Variant

    Dim feld() As Field

    spalte = 5

    zeile = 2

    Tabellenname = Sheets("metadaten").Cells(zeile, 2)

    zeilen = Sheets("metadaten").Cells(zeile, 3)

    Spalten = Sheets("metadaten").Cells(zeile, 4)

    'Prüfen, ob Datenbank bereits vorhanden

    If Dir(Dateiname) = "" Then

        'falls nicht, neu erzeugen

        Set Datenbank = CreateDatabase(Dateiname, dbLangGeneral, dbEncrypt)

    Else

        'ansonsten öffnen

        Set Datenbank = OpenDatabase(Dateiname)

    End If

    'Prüfen, ob Tabelle bereits vorhanden

    If Not TableExists(Dateiname, Tabellenname) Then

        'Tabelle erzeugen

        Set Datenbank = OpenDatabase(Dateiname)

        Set Tabelle = Datenbank.CreateTableDef(Tabellenname)

        'Felder erzeugen

        'Die Namen der Felder werden aus den

        'entsprechenden Zellen geholt

    ReDim feld(Spalten)

    For i = 1 To Spalten - 1

        feldname = Sheets("metadaten").Cells(zeile, spalte)

        feldtyp = Sheets("metadaten").Cells(zeile, spalte + 1)

        With Tabelle

            Set feld(i) = .CreateField(feldname, feldtyp)

            .Fields.Append feld(i)

        End With

    Next i

        'Tabelle hinzufügen

        Datenbank.TableDefs.Append Tabelle

    End If

    'Datenbank schliessen

    Datenbank.Close

    If Err.Number <> 0 Then MsgBox Err.Description

End Sub

Bei Set Feld(i) = ... gibt es die Fehlermeldung Datentyp-Konvertierungsfehler ... das ist die eine Geschichte.

Zum zweiten wollte ich wissen, ob man das mnit dem Feld so machen kann ?!

Danke und Gruß

Sven



Anzeige
Re: Felder Definieren für Access-Export
17.06.2003 14:37:11
RAnton

Hallo Sven

ich habe dir mal das aus der Hilfe kopiert

CreateField Method Example

This example uses the CreateField method to create three Fields for a new TableDef. It then displays the properties of those Field objects that are automatically set by the CreateField method. (Properties whose values are empty at the time of Field creation are not shown.)

Sub CreateFieldX()

Dim dbsNorthwind As Database
Dim tdfNew As TableDef
Dim fldLoop As Field
Dim prpLoop As Property

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set tdfNew = dbsNorthwind.CreateTableDef("NewTableDef")

' Create and append new Field objects for the new
' TableDef object.
With tdfNew
' The CreateField method will set a default Size
' for a new Field object if one is not specified.
.Fields.Append .CreateField("TextField", dbText)
.Fields.Append .CreateField("IntegerField", dbInteger)
.Fields.Append .CreateField("DateField", dbDate)
End With

dbsNorthwind.TableDefs.Append tdfNew

Debug.Print "Properties of new Fields in " & tdfNew.Name

' Enumerate Fields collection to show the properties of
' the new Field objects.
For Each fldLoop In tdfNew.Fields
Debug.Print " " & fldLoop.Name

For Each prpLoop In fldLoop.Properties
' Properties that are invalid in the context of
' TableDefs will trigger an error if an attempt
' is made to read their values.
On Error Resume Next
Debug.Print " " & prpLoop.Name & " - " & _
IIf(prpLoop = "", "[empty]", prpLoop)
On Error GoTo 0
Next prpLoop

Next fldLoop

' Delete new TableDef because this is a demonstration.
dbsNorthwind.TableDefs.Delete tdfNew.Name
dbsNorthwind.Close

End Sub


Damit müsstes du es eigentlich schaffen.

Das mit dem ReDim ist ok.

Gruß
RAnton

Anzeige
Für Interessierte : Die Lösung
17.06.2003 14:59:56
Sven

Liest über eine vorher automatisch genrierte MetaDaten-Tabelle die Feldnamen und Tabellennamen und erstellt sie in Access.



Public Sub Tabellen_erzeugen()
    Dim Spalten, zeilen As Variant
    Dim spalte, zeile As Variant
    Dim feldtyp As Variant
    Dim feldgrösse As Variant
    Dim As Integer
    Dim ecsit As Boolean
    Dim feld() As Field

    ecsit = False
    spalte = 5
    zeile = 2
    
    Do
    Tabellenname = Sheets("metadaten").Cells(zeile, 2)
    zeilen = Sheets("metadaten").Cells(zeile, 4)
    Spalten = Sheets("metadaten").Cells(zeile, 3)
    
    
    
    'Prüfen, ob Datenbank bereits vorhanden
    If Dir(Dateiname) = "" Then
        'falls nicht, neu erzeugen
        Set Datenbank = CreateDatabase(Dateiname, dbLangGeneral, dbEncrypt)
    Else
        'ansonsten öffnen
        Set Datenbank = OpenDatabase(Dateiname)
    End If
    
    'Prüfen, ob Tabelle bereits vorhanden
    If Not TableExists(Dateiname, Tabellenname) Then
        'Tabelle erzeugen
        Set Datenbank = OpenDatabase(Dateiname)
        Set Tabelle = Datenbank.CreateTableDef(Tabellenname)
    
        'Felder erzeugen
        'Die Namen der Felder werden aus den
        'entsprechenden Zellen geholt
    
    ReDim feld(Spalten - 1)
    
    
    For i = 0 To Spalten - 1
        feldtyp = Sheets("metadaten").Cells(zeile, spalte + 1)
        If feldtyp = 12 Then
            feldgrösse = 0
        Else
            feldgrösse = 254
        End If
        Set feld(i) = Tabelle.CreateField(Sheets("metadaten").Cells(zeile, spalte), feldtyp, feldgrösse)
        Tabelle.Fields.Append feld(i)
        spalte = spalte + 2
    Next i
           
        'Tabelle hinzufügen
        Datenbank.TableDefs.Append Tabelle
    End If
    
    'Datenbank schliessen
    Datenbank.Close
    zeile = zeile + 1
    spalte = 5
    If IsEmpty(Sheets("metadaten").Cells(zeile, spalte)) Then ecsit = True
    Loop Until ecsit = True
    If Err.Number <> 0 Then MsgBox Err.Description
End Sub



     Code eingefügt mit Syntaxhighlighter 2.1

Vielen Dank an Anton ! Hast mir sehr weitergeholfen.

Gruß

Sven

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige