collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 55
  • Punkt Versteckte: 0
  • Punkt Mitglieder: 0

Es sind keine Mitglieder online.

* Forenstatistik

  • stats Mitglieder insgesamt: 14061
  • stats Beiträge insgesamt: 67487
  • stats Themen insgesamt: 9096
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 17
  • stats Am meisten online: 415

Autor Thema: Tabelle aus Access in Excel importieren  (Gelesen 6259 mal)

Offline -Rockbiest-

  • Newbie
  • Beiträge: 43
Tabelle aus Access in Excel importieren
« am: April 20, 2015, 13:55:16 »
Hallo ich will diverse Spalten aus einer Access-Tabelle in eine vordefinierte Excel-Tabelle einfügen per Knopfdruck.
Das funktioniert bisher nicht. Lediglich die Datei findet er und öffnet diese, befüllt aber die Daten nicht. Ich hoffe mir kann jemand helfen.

Option Compare Database
Option Explicit

'Hierfür Microsoft Excel 15.0 library unter Verweise aktivieren
Private Sub cmd_kundenliste_inexcel_Click()

    Dim objExcel As Excel.Application
    Dim objWorkbook As Excel.Workbook
    Dim objSheet As Excel.Sheets
    Dim objRange As Excel.Range

    On Error Resume Next

    Set objExcel = GetObject(, "Excel.Application")
    If Err.Number = 429 Then
        Set objExcel = CreateObject("Excel.Application")
    End If

    objWorkbook = objExcel.Workbooks.Open("C:\Users\XXXXX\Desktop\XXXXXXX\Kundenliste_export")
   
    Set objRange = objSheet.Cells(2, 1).Resize(200, 12)
     

    Dim db As DAO.Database
    Dim rst As DAO.Recordset
   
    Dim kunden_id As Integer
    Dim kunden_nr As String
    Dim herr_frau As String
    Dim kunden_name As String
    Dim kunden_vorname As String
    Dim kunden_strasse As String
    Dim kunden_plz As String
    Dim kunden_stadt As String
    Dim kunden_land As String
    Dim kunden_telefon As String
    Dim kunden_fax As String
    Dim kunden_mobil As String
    Dim kunden_mail As String
   
    Set db = CurrentDb
    Set rst = db.OpenRecordset("SELECT kunde_id FROM tbl_kunden", dbOpenDynaset, dbSeeChanges)
    Debug.Print "rst"
   
    Dim i As Integer
    i = 0
   
   
    Do While Not rst.EOF

    Set kunden_nr = dao_loopup("kunde_nummer", "tbl_kunden", "kunde_id=" & Me!rst)
    Set herr_frau = dao_loopup("kunde_geschlecht", "tbl_kunden", "kunde_id=" & Me!rst)
    Set kunden_name = dao_loopup("kunde_kunde_unt_nachname", "tbl_kunden", "kunde_id=" & Me!rst)
    Set kunden_vorname = dao_loopup("kunde_vorname", "tbl_kunden", "kunde_id=" & Me!rst)
    Set kunden_strasse = dao_loopup("kunde_strasse_und_nr", "tbl_kunden", "kunde_id=" & Me!rst)
    Set kunden_plz = dao_loopup("kunde_plz", "tbl_kunden", "kunde_id=" & Me!rst)
    Set kunden_stadt = dao_loopup("kunde_stadt", "tbl_kunden", "kunde_id=" & Me!rst)
    Set kunden_land = dao_loopup("kunde_land", "tbl_kunden", "kunde_id=" & Me!rst)
    Set kunden_telefon = dao_loopup("kunde_tel", "tbl_kunden", "kunde_id=" & Me!rst)
    Set kunden_fax = dao_loopup("kunde_fax", "tbl_kunden", "kunde_id=" & Me!rst)
    Set kunden_mobil = dao_loopup("kunde_mobil", "tbl_kunden", "kunde_id=" & Me!rst)
    Set kunden_mail = dao_loopup("kunde_mail", "tbl_kunden", "kunde_id=" & Me!rst)
   

    With objWorksheet
        .Cells(2 + i, 1) = "kunden_nr"
        .Cells(2 + i, 2) = "herr_frau"
        .Cells(2 + i, 3) = "kunden_name"
        .Cells(2 + i, 4) = "kunden_vorname"
        .Cells(2 + i, 5) = "kunden_strasse"
        .Cells(2 + i, 6) = "kunden_plz"
        .Cells(2 + i, 7) = "kunden_stadt"
        .Cells(2 + i, 8) = "kunden_land"
        .Cells(2 + i, 9) = "kunden_telefon"
        .Cells(2 + i, 10) = "kunden_fax"
        .Cells(2 + i, 11) = "kunden_mobil"
        .Cells(2 + i, 12) = "kunden_email"

    i = i + 1

    rst.MoveNext
    Loop

    End With
    objExcel.Visible = True
End Sub

Das befüllen soll in der zweiten Zeile beginnen, da in der ersten Zeile die Überschriften stehen. i steht drin um jeweils zur nächsten Zeile zu springen entsprechend dem nächsten rst-Datensatz.

Das Programm stört sich jedoch direkt am "Set objRange = objSheet.Cells(2, 1).Resize(200, 12)" --> explizit am .Cells....


kann jemand helfen?


 

Offline MaggieMay

  • Global Moderator
  • Access Guru
  • *****
  • Beiträge: 3109
Re: Tabelle aus Access in Excel importieren
« Antwort #1 am: April 20, 2015, 14:06:30 »
Hi,

nenne doch bitte auch gleich noch den Wortlaut der Fehlermeldung dazu.

PS:
Die Variable objSheet ist zu dem Zeitpunkt nicht initialisiert und kann daher nicht verwendet werden.

PPS:
Aber das ist ja nicht der einzige Fehler. Später heißt es "objWorksheet" was ebensowenig initialisiert ist. Auch der Umgang mit dem Recordset geht so nicht, was soll das "Me" davor?! An die Kunden-ID kommst du bspw. mit rst(0).

Und anstelle der zahlreichen "dao_loopup's" kannst du doch die benötigten Felder direkt in der Abfrage auslesen.

Und am Ende schreibst du dann lauter Konstanten in die Zellen und keine Variablen!
« Letzte Änderung: April 20, 2015, 14:16:07 von MaggieMay »
Freundliche Grüße
MaggieMay
 

Offline -Rockbiest-

  • Newbie
  • Beiträge: 43
Re: Tabelle aus Access in Excel importieren
« Antwort #2 am: April 20, 2015, 14:31:16 »
Ööööööhm :D
Doch so viele Fehler, mhm... also erst einmal zur Fehlermeldung

"Fehler beim Kompilieren
Methode oder Datenobjekt nicht gefunden"

Das mit dem rst(0) ist soweit klar.
Alles weitere ist mir gerade ein wenig zu hoch :-/

objRange = ?
objWorksheet = ?

Bin noch ein Newbie :P
Ein kleiner Tipp vielleicht noch :)

Wie würde denn das statt des dao aussehen?
 

Offline MaggieMay

  • Global Moderator
  • Access Guru
  • *****
  • Beiträge: 3109
Re: Tabelle aus Access in Excel importieren
« Antwort #3 am: April 20, 2015, 14:54:30 »
Ein "kleiner Tipp" wird vermutlich nicht reichen, probiere es mal mit diesem Code:
Private Sub cmd_kundenliste2excel_Click()
    Dim rst As DAO.Recordset
    Dim objExcel As Excel.Application
    Dim objWorkbook As Excel.Workbook
    Dim strSQL As String
    Dim i As Integer
 On Error Resume Next
 
    Set objExcel = GetObject(, "Excel.Application")
    If Err.Number = 429 Then
        Set objExcel = CreateObject("Excel.Application")
    End If
    Set objWorkbook = objExcel.Workbooks.Open("C:\Users\XXXXX\Desktop\XXXXXXX\Kundenliste_export")
   
    strSQL = "SELECT kunde_id, kunde_nummer, kunde_geschlecht, kunde_kunde_unt_nachname, " & _
                              "kunde_vorname, kunde_strasse_und_nr, kunde_plz, kunde_stadt, kunde_land, " & _
                              "kunde_tel, kunde_fax, kunde_mobil, kunde_mail " & _
                  "FROM tbl_kunden"
    Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset, dbSeeChanges)
    Do While Not rst.EOF
        With objWorkbook.Sheets(1)
            .Cells(2 + i, 1) = rst(1)
            .Cells(2 + i, 2) = rst(2)
            .Cells(2 + i, 3) = rst(3)
            .Cells(2 + i, 4) = rst(4)
            .Cells(2 + i, 5) = rst(5)
            .Cells(2 + i, 6) = rst(6)
            .Cells(2 + i, 7) = rst(7)
            .Cells(2 + i, 8) = rst(8)
            .Cells(2 + i, 9) = rst(9)
            .Cells(2 + i, 10) = rst(10)
            .Cells(2 + i, 11) = rst(11)
            .Cells(2 + i, 12) = rst(12)
            i = i + 1
        End With
        rst.MoveNext
    Loop
    rst.Close
    objExcel.Visible = True
    Set objExcel = Nothing
End Sub
Beachte dabei, dass ich den Button umbenannt habe.
Freundliche Grüße
MaggieMay
 

Offline -Rockbiest-

  • Newbie
  • Beiträge: 43
Re: Tabelle aus Access in Excel importieren
« Antwort #4 am: April 20, 2015, 15:54:06 »
Die Logik habe ich soweit verstanden und übernommen.
Und es hat super funktioniert :)
Vielen lieben Dank.

Nur noch eine Kleinigkeit um es auch für die Zukunft besser nachzuvollziehen:
rst(1) - rst(12) bezieht sich auf die Reihenfolge der Attribute in strSQL, richtig?

Danke danke danke :)
 

Offline MaggieMay

  • Global Moderator
  • Access Guru
  • *****
  • Beiträge: 3109
Re: Tabelle aus Access in Excel importieren
« Antwort #5 am: April 20, 2015, 15:59:37 »
Zitat
richtig?
Ja, so ist es, es war mir einfach zu lästig, all die langen Feldnamen noch einmal zu schreiben (bzw. zu kopieren). ;-)
Freundliche Grüße
MaggieMay
 

Offline daolix

  • Access-Profi
  • **
  • Beiträge: 355
  • Von nix nen Plan
Re: Tabelle aus Access in Excel importieren
« Antwort #6 am: April 20, 2015, 18:41:53 »
Wenn die Reihenfolge der Feldnamen in sql mit der in der Exceltab übereinstimmen, so sollte aber auch ein CopyFromRecordset reichen. Das Loopen entfällt, auch ist es schneller als jede Zellen einzeln zu beschreiben.
 

Offline -Rockbiest-

  • Newbie
  • Beiträge: 43
Re: Tabelle aus Access in Excel importieren
« Antwort #7 am: April 21, 2015, 12:54:19 »
In weiterem Vorgehen ist mir leider noch etwas aufgefallen:
Wie müsste ich den Code umschreiben, wenn ich die Attribute aus zwei verschiedenen Tabellen in Access ziehen würde, um sie in eine Excel-Tabelle zu schreiben.
Verknüpft sind die Tabellen miteinander.
 

Offline MaggieMay

  • Global Moderator
  • Access Guru
  • *****
  • Beiträge: 3109
Re: Tabelle aus Access in Excel importieren
« Antwort #8 am: April 21, 2015, 13:13:07 »
Das ist kein Problem, du musst einfach nur die Abfrage erweitern.

Wenn dir das leichter fällt, erstelle die Abfrage mit den beiden Tabellen und den benötigten Datenfeldern im Entwurfsfenster, wechsle dann in die SQL-Ansicht und kopiere den Code ins VBA-Fenster, wo du ihn nur noch in einen String zu verpacken brauchst.
Freundliche Grüße
MaggieMay