Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: array und ADO.Recordset in tabelle schreiben

array und ADO.Recordset in tabelle schreiben
18.06.2008 08:00:33
mischarichter
Guten Morgen,
gibts eigentlich eine Möglichkeit ein zweidimensionales Array in eine xl-Tabelle zu schreiben?
Bisher gehe ich das array zeilen weise durch und trage zellenweise die werte ein.
Und wenn ich nicht ein array, sondern ein ADO.Recordset habe, kann ich das dann auch ganz einfach an die Tabelle übergeben - oder geht es auch nur datensatzweise?
Danke für jede Rückmeldung.
Mischa Richter

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: array und ADO.Recordset in tabelle schreiben
18.06.2008 08:24:37
Luschi
Hallo Mischa,
zu 1.)

Sub test1()
Dim arr(10, 2)
arr(0, 0) = "a"
arr(0, 1) = "aa"
arr(0, 2) = "aaa"
arr(1, 0) = "b"
arr(1, 1) = "bb"
arr(1, 2) = "bbb"
arr(2, 0) = "c"
arr(2, 1) = "cc"
arr(2, 2) = "ccc"
arr(10, 0) = "k"
arr(10, 1) = "kk"
arr(10, 2) = "kk"
ActiveSheet.Range("A1:C11").Value = arr()
End Sub

zu 2.)
Dafür besitzt das Range-Objekt die Methode 'CopyFromRecordset'
Gruß von Luschi
aus klein-Paris

Anzeige
AW: zu ADO.Recordset
18.06.2008 09:42:37
mischarichter
super!!
bisher hat das übergeben des ADO.RS mit 60 spalten und 4.000 zielen 10 Minuten gedauert.
jetzt nur noch 5 sekunden!
Ich muss nur noch die spaltenformatierungen hinbekommen, da DAtumswerte jetzt als Enterprise-Sternzeit angezeigt werden.
Grüße nach Leipzsch.
MischaRichter
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Zweidimensionales Array und ADO.Recordset in Excel-Tabelle schreiben


Schritt-für-Schritt-Anleitung

Um ein zweidimensionales Array in eine Excel-Tabelle zu schreiben, kannst Du den folgenden VBA-Code verwenden. Dieser Code erstellt ein einfaches Array und überträgt die Werte in den angegebenen Zellbereich:

Sub test1()
    Dim arr(10, 2)
    arr(0, 0) = "a"
    arr(0, 1) = "aa"
    arr(0, 2) = "aaa"
    arr(1, 0) = "b"
    arr(1, 1) = "bb"
    arr(1, 2) = "bbb"
    arr(2, 0) = "c"
    arr(2, 1) = "cc"
    arr(2, 2) = "ccc"
    arr(10, 0) = "k"
    arr(10, 1) = "kk"
    arr(10, 2) = "kk"
    ActiveSheet.Range("A1:C11").Value = arr()
End Sub

Für das Übertragen eines ADO.Recordset in eine Excel-Tabelle kannst Du die Methode CopyFromRecordset des Range-Objekts verwenden. Hier ist ein Beispiel:

Sub ADORecordsetToExcel()
    Dim conn As Object
    Dim rs As Object
    Set conn = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.Recordset")

    conn.Open "DeineVerbindungszeichenfolge"
    rs.Open "SELECT * FROM DeineTabelle", conn
    ActiveSheet.Range("A1").CopyFromRecordset rs

    rs.Close
    conn.Close
End Sub

Häufige Fehler und Lösungen

  1. Fehler: "Typ nicht übereinstimmend"
    Lösung: Stelle sicher, dass die Dimensionen des Arrays mit dem Zielbereich in Excel übereinstimmen.

  2. Fehler: ADO.Recordset wird nicht gefüllt
    Lösung: Überprüfe die Verbindungszeichenfolge und die SQL-Abfrage, um sicherzustellen, dass sie korrekt sind.

  3. Fehler: Datenformatierung nicht korrekt
    Lösung: Nach dem Übertragen der Daten kannst Du das Format der Zellen in Excel anpassen, um sicherzustellen, dass Datumswerte korrekt angezeigt werden.


Alternative Methoden

Eine alternative Methode, um Daten in Excel zu importieren, ist die Verwendung von Power Query. Dies kann besonders nützlich sein, wenn Du Daten aus verschiedenen Quellen zusammenführen möchtest, ohne VBA zu verwenden.

Du kannst auch direkt aus SQL-Datenbanken importieren, indem Du die "Daten abrufen" Funktion in Excel verwendest, um ADO.Recordsets zu vermeiden.


Praktische Beispiele

Hier ein Beispiel, wie Du ein ADO.Recordset nutzen kannst, um einen großen Datensatz effizient in eine Tabelle zu übertragen. Dies spart viel Zeit, besonders bei großen Datenmengen:

Sub ImportLargeData()
    Dim conn As Object
    Dim rs As Object
    Set conn = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.Recordset")

    conn.Open "DeineVerbindungszeichenfolge"
    rs.Open "SELECT * FROM DeineGroßeTabelle", conn
    ActiveSheet.Range("A1").CopyFromRecordset rs

    rs.Close
    conn.Close
End Sub

In diesem Beispiel wird ein ADO.Recordset verwendet, um Daten aus einer großen Tabelle in Excel zu importieren, was die Verarbeitungszeit erheblich verkürzt.


Tipps für Profis

  • Verwende das Application.ScreenUpdating = False: Dies kann die Leistung verbessern, wenn Du große Datenmengen in Excel überträgst.

  • Nutze die Resize-Methode: Diese Methode ist nützlich, um den Zielbereich dynamisch an die Größe des Arrays anzupassen.

  • Füge Fehlerbehandlung ein: Verwende On Error GoTo, um potenzielle Fehler während des Datenimports zu behandeln.


FAQ: Häufige Fragen

1. Wie kann ich ein Array in eine nicht zusammenhängende Tabelle einfügen?
Du kannst das Array in mehrere Bereiche aufteilen und nacheinander in die entsprechenden Zellen einfügen.

2. Ist es möglich, ein ADO.Recordset direkt in ein bestimmtes Arbeitsblatt zu schreiben?
Ja, einfach das Zielarbeitsblatt vor dem Kopieren des Recordsets angeben, z.B. Sheets("DeinBlatt").Range("A1").CopyFromRecordset rs.

3. Wie kann ich die Formatierung der importierten Daten ändern?
Nach dem Importieren kannst Du die Zellen formatieren, indem Du die NumberFormat-Eigenschaft verwendest, z.B. Range("A1:A100").NumberFormat = "dd.mm.yyyy" für Datumswerte.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige