Live-Forum - Die aktuellen Beiträge
Datum
Titel
23.04.2025 08:56:57
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA - CopyFromRecordset für Array

Forumthread: VBA - CopyFromRecordset für Array

VBA - CopyFromRecordset für Array
07.05.2002 09:32:19
Jan Kittler
Hallo,

mit der CopyFromRecordset-Methode kann man sehr effizient große Datenmengen in ein Tabellenblatt "schaufeln". Gibt es eine vergleichbare Methode auch zum Füllen eines Arrays?

Grüße aus Dresden
Jan

Anzeige

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

Betreff
Datum
Anwender
Anzeige
Re: VBA - CopyFromRecordset für Array
07.05.2002 09:35:08
Hans W. Herber
Hallo Jan,

der einfachste Weg: Füge die Daten in ein - temporäres - Tabellenblatt ein und lies sie von dort in ein Array - also eine Variant-Variable - ein.

hans

Re: VBA - CopyFromRecordset für Array
07.05.2002 09:41:19
Jan Kittler
Danke Hans,

das habe ich auch schon überlegt, dachte es gibt vielleicht einen direkten und ebenso schnellen Weg.

Jan

Anzeige
Re: VBA - CopyFromRecordset für Array
07.05.2002 09:43:26
Hans W. Herber
... aufgrund der zum Einsatz des Features benötigten Objekte denke ich nicht ... hans

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Effizientes Arbeiten mit CopyFromRecordset und Arrays in VBA


Schritt-für-Schritt-Anleitung

Um Daten aus einem Recordset in ein Array zu übertragen, kannst Du die CopyFromRecordset-Methode verwenden, um die Daten zunächst in ein Tabellenblatt einzufügen und sie anschließend in ein Array zu lesen. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Erstelle ein neues Arbeitsblatt: Füge ein temporäres Arbeitsblatt hinzu, um die Daten zwischenzuspeichern.

    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets.Add
  2. Öffne eine Verbindung zur Datenbank: Verwende ADO, um eine Verbindung zu Deiner Datenquelle herzustellen.

    Dim conn As Object
    Set conn = CreateObject("ADODB.Connection")
    conn.Open "DeineVerbindungszeichenfolge"
  3. Erstelle ein Recordset und fülle es: Führe eine SQL-Abfrage aus, um die Daten in das Recordset zu laden.

    Dim rs As Object
    Set rs = CreateObject("ADODB.Recordset")
    rs.Open "SELECT * FROM DeineTabelle", conn
  4. Nutze CopyFromRecordset: Übertrage die Daten in das temporäre Arbeitsblatt.

    ws.Range("A1").CopyFromRecordset rs
  5. Lese die Daten in ein Array: Konvertiere die Daten im Arbeitsblatt in ein Array.

    Dim myArray As Variant
    myArray = ws.UsedRange.Value
  6. Bereinige: Schließe das Recordset und die Verbindung und lösche das temporäre Arbeitsblatt.

    rs.Close
    conn.Close
    Application.DisplayAlerts = False
    ws.Delete
    Application.DisplayAlerts = True

Häufige Fehler und Lösungen

  • Fehler: "Typ nicht übereinstimmend": Dieser Fehler tritt auf, wenn Du versuchst, einen Datentyp in ein Array zu übertragen, der nicht kompatibel ist. Stelle sicher, dass die Daten im Recordset den richtigen Typ haben.

  • Lösung: Verwende CStr, CInt usw., um die Datentypen im Array korrekt zu formatieren, bevor Du sie weiterverarbeitest.

  • Fehler: "Objekt nicht gefunden": Dieser Fehler kann auftreten, wenn das Arbeitsblatt nicht korrekt erstellt wurde.

  • Lösung: Überprüfe, ob das Arbeitsblatt tatsächlich erstellt wurde und dass der Name des Arbeitsblatts nicht bereits existiert.


Alternative Methoden

Anstatt Daten über ein temporäres Arbeitsblatt zu übertragen, kannst Du auch direkt ein Array mit GetRows aus dem Recordset erstellen:

Dim myArray As Variant
myArray = rs.GetRows

Diese Methode ist oft schneller, da sie die Notwendigkeit eines temporären Arbeitsblatts vermeidet.


Praktische Beispiele

Hier ist ein einfaches Beispiel, um Daten aus einer Excel-Datenbank direkt in ein Array zu laden:

Sub LoadDataIntoArray()
    Dim conn As Object, rs As Object, myArray As Variant
    Set conn = CreateObject("ADODB.Connection")
    conn.Open "DeineVerbindungszeichenfolge"

    Set rs = CreateObject("ADODB.Recordset")
    rs.Open "SELECT * FROM DeineTabelle", conn

    myArray = rs.GetRows

    ' Verarbeitung des Arrays
    Dim i As Long
    For i = LBound(myArray, 2) To UBound(myArray, 2)
        Debug.Print myArray(0, i) ' Beispielweise die erste Spalte
    Next i

    rs.Close
    conn.Close
End Sub

Tipps für Profis

  • Verwende Error Handling: Implementiere On Error Resume Next, um potenzielle Laufzeitfehler zu behandeln und die Stabilität Deines Codes zu erhöhen.

  • Datenbankverbindungen optimieren: Halte die Verbindung so kurz wie möglich und öffne sie nur, wenn Du sie benötigst.

  • Cache die Daten: Wenn Du häufig auf dieselben Daten zugreifen musst, ziehe in Betracht, sie im Speicher zu halten, um die Leistung zu verbessern.


FAQ: Häufige Fragen

1. Wie kann ich die Größe des Arrays bestimmen?
Du kannst die Funktionen UBound und LBound verwenden, um die Dimensionen des Arrays zu ermitteln.

2. Kann ich CopyFromRecordset ohne ein Arbeitsblatt verwenden?
Nein, CopyFromRecordset erfordert ein Ziel, in das die Daten kopiert werden. Eine direkte Übertragung in ein Array ist nicht möglich, ohne zuvor ein Arbeitsblatt zu verwenden oder GetRows zu nutzen.

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