Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Daten aus ACCESS auslesen

Forumthread: Daten aus ACCESS auslesen

Daten aus ACCESS auslesen
14.05.2003 16:28:38
Toni
Hallo! möchte ein Makro schreiben, was folgendes kann:

Aus Accesstabelle aus bestimmter Spalte Namen auslesen und nach Excel kopieren. Danach in bestimmtem Verzeichnis die File-Namen auslesen und mit dem ACCESS-Namen vergleichen. Bei Übereinstimmung das Erstelldatum der Datei in die ACCESS-Tabelle in die gleiche Zeile, andere Spalte eintragen.
Kann mir jemand helfen?

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: Daten aus ACCESS auslesen
14.05.2003 16:46:14
Michael Scheffler
Hallo,

Du solltest Dich mal mit DAO oder ADO beschäftigen und uns mal die Struktur Deiner Tabelle zeigen.

Gruß

Michael

Re: Daten aus ACCESS auslesen
14.05.2003 19:41:22
andre
hallo allerseits,
die aufgabe ist nicht allzu schwer und eine prinzipielle lösung auch ohne kenntnis der spalten möglich - aber besser ist es schon, das in der frage anzugeben.
die frage ist, warum du excel dazu nehmen willst und es nicht gleich in access programmierst?

hier mal ein beispielcod für zugriffe auf die nordwind-datenbank. für die dateisuche schaue mal in die hilfe zum dir-befehl.


Option Explicit
' Modul
' definieren der Objektvariable
Global DB As Database
Global RS As Recordset
Global crs As Recordset

Public Sub main()
  UserForm2.Show
End Sub

Public Sub proDBOpen()
Dim tabelle
' Initialisieren
Set DB = OpenDatabase("c:\db\nordwind.mdb", TrueTrue)
  UserForm2.Label1.Caption = DB.Name
Set RS = DB.OpenRecordset("artikel", dbOpenSnapshot, dbReadOnly)
'dbopentable zur bearbeitung, da funktioniert aber rs.absoluteposition nicht !!
  RS.MoveLast
  RS.MoveFirst
Set crs = DB.OpenRecordset("select count(*) from artikel") 'ausgabe in userform
' muss nicht sein - rs.recordcount !!
  For Each tabelle In DB.TableDefs
    UserForm2.lsttab.AddItem (tabelle.Name)
  Next
End Sub

'ab hier in userform
Public Sub proDBClose()
RS.Close
DB.Close
End Sub

Private Sub cmdOK_Click()
Dim feld As Field

ListBox1.Clear
ListBox1.ColumnWidths = ""
'ListBox1.AddItem (feld.Value)
If lsttab.Text <> "" Then       'ansonsten tabelle artikel aus sub dbopen
    Set RS = DB.OpenRecordset(lsttab.Text, dbOpenSnapshot, dbReadOnly)
End If
RS.MoveLast                     ' sonst bringt rs.recordcount 1
RS.MoveFirst
'    Dim arrTabelle(1 To 10, 1 To 10) hier nicht, da variable Array-Zahl
ReDim arrTabelle(1 To RS.Fields.Count, 1 To RS.RecordCount)
UserForm2.ListBox1.ColumnCount = RS.Fields.Count
For Each feld In RS.Fields      ' Spaltengrösse der Listbox einstellen
     If feld.Type = Date Then
          FeldGroesse = 5 * feld.Size + 25   ' summand für rand, bei datum zzgl
     Else                                    ' Platz fuer Punkte
          FeldGroesse = 5 * feld.Size + 15   ' Feldtyp Beschreibung DB-Size = 0!!
     End If                                  ' da Länge dieses Typ's variabel ist
     If ListBox1.ColumnWidths = "" Then      ' erste Groesse ohne Semikolon
           ListBox1.ColumnWidths = FeldGroesse
     Else
           ListBox1.ColumnWidths = ListBox1.ColumnWidths & ";" & FeldGroesse
     End If
Next
    
Dim intRow As Integer, intCol As Integer
For intRow = 1 To RS.RecordCount  ' array füllen / Zeilen
    intCol = 0                    ' muss für jede neue Zeile auf null gesetzt werden
    For Each feld In RS.Fields    ' array füllen / Spalten
        intCol = intCol + 1
        arrTabelle(intCol, intRow) = feld
    Next
    RS.MoveNext
Next intRow
ListBox1.Column = arrTabelle    ' Listbox füllen
RS.MoveFirst                    ' sonst klappt weiter / zurueck nicht
ListBox1.Selected(0) = True
counter = "Datensatz: 1 von: " & RS.RecordCount
End Sub

Private Sub cmdEnde_Click()
RS.MoveLast
counter = "Datensatz: " & RS.AbsolutePosition + 1 & " von: " & RS.RecordCount
ListBox1.Selected(RS.AbsolutePosition) = True
End Sub

Private Sub cmdWeiter_Click()
'vor
If Not RS.EOF Then
    RS.MoveNext
    If RS.EOF Then
        RS.MovePrevious
        MsgBox "Ende erreicht", vbCritical
    End If
    ' absoluteposition + 1, da mit 0 beginnend!
    counter = "Datensatz: " & RS.AbsolutePosition + 1 & " von: " & RS.RecordCount
    ListBox1.Selected(RS.AbsolutePosition) = True
End If
Exit Sub
End Sub

Private Sub cmdAnfang_Click()
RS.MoveFirst
counter = "Datensatz: " & RS.AbsolutePosition + 1 & " von: " & RS.RecordCount
ListBox1.Selected(RS.AbsolutePosition) = True
End Sub

Private Sub cmdZurueck_Click()
'zurück
If Not RS.BOF Then
    RS.MovePrevious
    If RS.BOF Then
        RS.MoveNext
        MsgBox "Anfang erreicht", vbCritical
    End If
    ' absoluteposition + 1, da mit 0 beginnend!
    counter = "Datensatz: " & RS.AbsolutePosition + 1 & " von: " & RS.RecordCount
    ListBox1.Selected(RS.AbsolutePosition) = True
End If
End Sub

Private Sub cmdUndTschuess_Click()
Unload Me
End Sub

Private Sub lstTab_click()
Dim feld As Field
lstfeld.Clear
For Each feld In DB.TableDefs(lsttab.List(lsttab.ListIndex)).Fields
    lstfeld.AddItem (feld.Name) & " (" & feld.Size & ")"
Next
End Sub

Private Sub UserForm_Initialize()
Dim tabelle
proDBOpen
End Sub

Private Sub UserForm_Terminate()
proDBClose
End Sub
 

     Code eingefügt mit Syntaxhighlighter 1.16

gruss andre

Anzeige
Re: Daten aus ACCESS auslesen
15.05.2003 08:13:46
Toni
Hallo!

habe noch folgendes erfolgreich ausprobiert:

Tabelle nach Excel exportiert und dort folgendes Makro laufen lassen:

Sub DatumZeit()

For i = 2 To 1100
NameDatei = Cells(i, 4)
Set ds = Application.FileSearch
With ds
.LookIn = "U:\Ds500Ser\ConasV56\457"
.FileName = NameDatei & ".kkf"

'Nur wenn Datei in Verzeichnis gefunden wurde
If .Execute > 0 Then
Nameges = "U:\Ds500Ser\ConasV56\457\" & NameDatei & ".kkf"
Zeitangabe = FileDateTime(Nameges)
Cells(i, 5) = Zeitangabe
Else

End If

End With

Next
End Sub

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Daten aus ACCESS auslesen und nach Excel übertragen


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und aktiviere die Entwicklertools, um ein neues Makro zu erstellen.
  2. Erstelle eine Verbindung zur Access-Datenbank:
    Dim db As Database
    Dim rs As Recordset
    Set db = OpenDatabase("C:\Pfad\zu\deiner\Datenbank.accdb")
    Set rs = db.OpenRecordset("SELECT * FROM TabelleName")
  3. Lese die gewünschten Werte aus der Tabelle:
    Dim i As Integer
    i = 1
    Do While Not rs.EOF
       Cells(i, 1).Value = rs.Fields("SpaltenName").Value
       rs.MoveNext
       i = i + 1
    Loop
  4. Finde die Dateien im Verzeichnis und vergleiche sie mit den Werten aus Access:
    Dim FileName As String
    FileName = "U:\DeinVerzeichnis\" & Cells(i, 1).Value & ".kkf"
    If Dir(FileName) <> "" Then
       Cells(i, 2).Value = FileDateTime(FileName)
    End If
  5. Speichere die Änderungen in Access, wenn die Übereinstimmungen gefunden wurden:
    rs.Update

Häufige Fehler und Lösungen

  • Fehler: „Datenbank nicht gefunden“
    Lösung: Überprüfe den Pfad zur Access-Datenbank. Stelle sicher, dass der Dateiname und die Erweiterung korrekt sind.

  • Fehler: „Objektvariable nicht gesetzt“
    Lösung: Vergewissere dich, dass die DAO- oder ADO-Bibliothek in den Verweisen aktiviert ist.

  • Fehler: „Datei nicht gefunden“
    Lösung: Überprüfe den Dateipfad und den Dateinamen. Stelle sicher, dass die Datei im angegebenen Verzeichnis vorhanden ist.


Alternative Methoden

  1. Verwendung von ADO: Anstelle von DAO kannst du ADO verwenden, um auf die Access-Datenbank zuzugreifen. Beispiel:

    Dim conn As Object
    Set conn = CreateObject("ADODB.Connection")
    conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Pfad\zu\deiner\Datenbank.accdb;"
  2. Exportieren der Access-Daten: Du kannst die Daten auch direkt aus Access exportieren, anstatt sie in Excel auszulesen. Das geht über den „Exportieren“-Befehl in Access.


Praktische Beispiele

Ein Beispiel für ein vollständiges Makro, das die oben genannten Schritte integriert:

Sub ExtractDataFromAccess()
    Dim db As Database
    Dim rs As Recordset
    Dim i As Integer

    Set db = OpenDatabase("C:\Pfad\zu\deiner\Datenbank.accdb")
    Set rs = db.OpenRecordset("SELECT Name FROM Nordwind")

    i = 1
    Do While Not rs.EOF
        Cells(i, 1).Value = rs.Fields("Name").Value
        ' Hier den Dateivergleich hinzufügen
        i = i + 1
        rs.MoveNext
    Loop

    rs.Close
    db.Close
End Sub

Tipps für Profis

  • Nutze Error Handling in deinem VBA-Code, um potenzielle Fehler besser zu managen:

    On Error GoTo ErrorHandler
    ' Dein Code hier
    Exit Sub
    ErrorHandler:
    MsgBox "Ein Fehler ist aufgetreten: " & Err.Description
  • Automatisiere den Importprozess, indem Du das Makro regelmäßig über den Taskplaner ausführst, wenn die Daten aktualisiert werden.


FAQ: Häufige Fragen

1. Wie kann ich nur bestimmte Spalten aus Access auslesen?
Du kannst die SQL-Abfrage in OpenRecordset anpassen, um nur die benötigten Spalten auszuwählen, z.B. SELECT Spalte1, Spalte2 FROM Tabelle.

2. Funktioniert das auch mit Excel 365?
Ja, das VBA-Skript ist mit Excel 365 und älteren Versionen kompatibel, solange die richtigen Bibliotheken aktiviert sind.

3. Kann ich auch mehrere Access-Datenbanken gleichzeitig abfragen?
Ja, du kannst mehrere Verbindungen in deinem VBA-Code definieren und die Daten aus verschiedenen Datenbanken abfragen.

4. Wie kann ich die Nordwind-Datenbank verwenden?
Du kannst die Nordwind-Datenbank herunterladen und die gleichen Schritte wie oben beschrieben anwenden, um Daten auszulesen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige