Re: Excel97 Datei nach Access97 konvertieren
23.06.2002 20:43:17
Manfred B.
Folgendes Makro erzeugt eine Tabelle mit 37 Spalten und 10000 Zeilen , einfach An Deine Belange anpassen.In Extras Verweise einen Haken vor: DAO 2.5/3.51 Compatibility Library setzen.
Vorgehensweise:
Einmal eine Access Datenbank anlegen und einmal die Tabelle aus Excel importieren.
Das Makro löscht dann die alte Tabelle und erzeugt eine neue
'Dateiname der Datenbank
Public Const Dateiname = "D:\Maschinenbelegung.mdb"
'Tabellenname in der Datenbank
Public Const Tabellenname = "Stunden"
Dim Datenbank As Database
Dim Datensatz As Recordset
Dim Tabelle As TableDef
'Tabelle löschen
Public Sub Tabelle_löschen()
'Datenbank zum Löschen öffnen
Set Datenbank = OpenDatabase(Dateiname)
'Tabelle löschen
Datenbank.TableDefs.Delete Tabellenname
'Datenbank schliessen
Datenbank.Close
Call Datenbank_und_Tabelle_erzeugen
End Sub
'Prüft, ob eine Tabelle in einer
'Datenbank bereits vorhanden ist
Public Function TableExists(Dateiname, MyTableName)
Dim i
'Prüfen, ob die Datenbank existiert
If Dir(Dateiname) = "" Then
TableExists = False
Exit Function
End If
'Datenbank öffnen
Set Datenbank = OpenDatabase(Dateiname)
TableExists = False
'alle Tabellen durchkaufen
For i = 0 To Datenbank.TableDefs.Count - 1
If Datenbank.TableDefs(i).Name = MyTableName Then
TableExists = True
Exit Function
End If
Next i
Datenbank.Close
End Function
'Erzeugen der Datenbank und Tabelle
Public Sub Datenbank_und_Tabelle_erzeugen()
Dim Feld1 As Field
Dim Feld2 As Field
Dim Feld3 As Field
Dim Feld4 As Field
Dim Feld5 As Field
Dim Feld6 As Field
Dim Feld7 As Field
Dim Feld8 As Field
Dim Feld9 As Field
Dim Feld10 As Field
Dim Feld11 As Field
Dim Feld12 As Field
Dim Feld13 As Field
Dim Feld14 As Field
Dim Feld15 As Field
Dim Feld16 As Field
Dim Feld17 As Field
Dim Feld18 As Field
Dim Feld19 As Field
Dim Feld20 As Field
Dim Feld21 As Field
Dim Feld22 As Field
Dim Feld23 As Field
Dim Feld24 As Field
Dim Feld25 As Field
Dim Feld26 As Field
Dim Feld27 As Field
Dim Feld28 As Field
Dim Feld29 As Field
Dim Feld30 As Field
Dim Feld31 As Field
Dim Feld32 As Field
Dim Feld33 As Field
Dim Feld34 As Field
Dim Feld35 As Field
'On Error Resume Next
'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
With Tabelle
Set Feld1 = .CreateField(Range("A1"), dbText, 50)
Set Feld2 = .CreateField(Range("B1"), dbLong)
Set Feld3 = .CreateField(Range("C1"), dbText, 255)
Set Feld4 = .CreateField(Range("D1"), dbDate)
Set Feld5 = .CreateField(Range("E1"), dbDate)
Set Feld6 = .CreateField(Range("F1"), dbDate)
Set Feld7 = .CreateField(Range("G1"), dbDate)
Set Feld8 = .CreateField(Range("H1"), dbDate)
Set Feld9 = .CreateField(Range("I1"), dbDate)
Set Feld10 = .CreateField(Range("J1"), dbDate)
Set Feld11 = .CreateField(Range("K1"), dbDate)
Set Feld12 = .CreateField(Range("L1"), dbDate)
Set Feld13 = .CreateField(Range("M1"), dbDate)
Set Feld14 = .CreateField(Range("N1"), dbDate)
Set Feld15 = .CreateField(Range("O1"), dbDate)
Set Feld16 = .CreateField(Range("P1"), dbDate)
Set Feld17 = .CreateField(Range("Q1"), dbDate)
Set Feld18 = .CreateField(Range("R1"), dbDate)
Set Feld19 = .CreateField(Range("S1"), dbDate)
Set Feld20 = .CreateField(Range("T1"), dbDate)
Set Feld21 = .CreateField(Range("U1"), dbDate)
Set Feld22 = .CreateField(Range("V1"), dbDate)
Set Feld23 = .CreateField(Range("W1"), dbDate)
Set Feld24 = .CreateField(Range("X1"), dbDate)
Set Feld25 = .CreateField(Range("Y1"), dbDate)
Set Feld26 = .CreateField(Range("Z1"), dbDate)
Set Feld27 = .CreateField(Range("AA1"), dbDate)
Set Feld28 = .CreateField(Range("AB1"), dbDate)
Set Feld29 = .CreateField(Range("AC1"), dbDate)
Set Feld30 = .CreateField(Range("AD1"), dbDate)
Set Feld31 = .CreateField(Range("AE1"), dbDate)
Set Feld32 = .CreateField(Range("AF1"), dbDate)
Set Feld33 = .CreateField(Range("AG1"), dbDate)
Set Feld34 = .CreateField(Range("AH1"), dbDate)
Set Feld35 = .CreateField(Range("AI1"), dbDate)
.Fields.Append Feld1
.Fields.Append Feld2
.Fields.Append Feld3
.Fields.Append Feld4
.Fields.Append Feld5
.Fields.Append Feld6
.Fields.Append Feld7
.Fields.Append Feld8
.Fields.Append Feld9
.Fields.Append Feld10
.Fields.Append Feld11
.Fields.Append Feld12
.Fields.Append Feld13
.Fields.Append Feld14
.Fields.Append Feld15
.Fields.Append Feld16
.Fields.Append Feld17
.Fields.Append Feld18
.Fields.Append Feld19
.Fields.Append Feld20
.Fields.Append Feld21
.Fields.Append Feld22
.Fields.Append Feld23
.Fields.Append Feld24
.Fields.Append Feld25
.Fields.Append Feld26
.Fields.Append Feld27
.Fields.Append Feld28
.Fields.Append Feld29
.Fields.Append Feld30
.Fields.Append Feld31
.Fields.Append Feld32
.Fields.Append Feld33
.Fields.Append Feld34
.Fields.Append Feld35
End With
'Tabelle hinzufügen
Datenbank.TableDefs.Append Tabelle
End If
'Datenbank schliessen
Datenbank.Close
If Err.Number <> 0 Then MsgBox Err.Description
Call Daten_schreiben
End Sub
'Daten aus einem Bereich in die Datenbank schreiben
Public Sub Daten_schreiben()
Dim x%
Dim y%
'Prüfen, Tabelle existiert
If Not TableExists(Dateiname, Tabellenname) Then
MsgBox "Datenbank oder Tabelle ist nicht vorhanden !", vbExclamation
Exit Sub
End If
'Datenbank und Tabelle öffnen
Set Datenbank = OpenDatabase(Dateiname)
Set Datensatz = Datenbank.OpenRecordset(Tabellenname)
With Datensatz
'Bereich A1:AI10000
For x = 2 To 10000
.AddNew
For y = 1 To 35 'Spalte 1 bis 35
.Fields(Cells(1, y)).Value = Cells(x, y).Value
Next y
'Datensatz updaten
.Update
.Bookmark = .LastModified
Next x
End With
Datenbank.Close
End Sub