Office: Spalte in Array speichern

Helfe beim Thema Spalte in Array speichern in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Hallo liebe Community, ich würde gerne alle Werte einer Spalte in ein Array speichern. Dazu habe ich folgenden Code, um alle Werte aus einer... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von mooqoo, 29. Juni 2009.

  1. mooqoo Neuer User

    Spalte in Array speichern


    Hallo liebe Community,
    ich würde gerne alle Werte einer Spalte in ein Array speichern.
    Dazu habe ich folgenden Code, um alle Werte aus einer bestimmten Spalte auszulesen:

    Code:
    Private Sub Duplicate()
    
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim strSQL As String
    Dim var
    
    Set db = CurrentDb
    strSQL = "SELECT Controlling_Area FROM Controlling_Area"
    Set rs = db.OpenRecordset(strSQL)
    
    If Not rs.EOF Then rs.MoveFirst
    
    Do While Not rs.EOF
        var = rs!Controlling_Area
        rs.MoveNext
    Loop
    rs.Close
    Set rs = Nothing
    Set db = Nothing
    
    End Sub
    Wenn ich jetzt zum Besipiel "MsgBox (var)" in die Schleife schreibe, dann gibt er mir auch jeden Wert aus.
    Nur um mit diesen weiter Arbeiten zu können, würde ich die Werte gerne in ein Array speichern. Leider weiß ich nicht wie, bzw. alle versuche sind in einer Fehlermeldung geendet.

    Hoffe mir kann da jemand weiterhelfen!

    Gruß mooqoo
     
    mooqoo, 29. Juni 2009
    #1
  2. miriki Erfahrener User
    Zuerst brauchst Du, um in ein Array speichern zu können... ein Array! ;-) Klingt komisch, ist aber so:
    Code:
    dim var(100) as string
    Damit hast Du jetzt nicht nur eine Variable "var", sondern gleich 100 Stück davon auf einem Haufen. Welches der 100 Du dann ansprechen möchtest, entscheidest Du dann über den Index in ().

    Dann brauchst Du als nächstes einen Zähler, der als eben genau dieser Index verwendet wird. Am Anfang der Schleife wird er auf 0 gesetzt und in jedem Schleifendurchlauf um 1 erhöht:
    Code:
    cnt=0
    Do While Not rs.EOF
        cnt = cnt+1
        var(cnt) = rs!Controlling_Area
        rs.MoveNext
    Loop
    Und schwupps hast Du in var(1) bis var(cnt) die einzelnen Werte aus Deiner Datenbank.

    Grundsätzlich geht es so, aber: Das Problem ist, daß man wissen muß, wieviele Datensätze man hat, um entsprechend viele Elemente von var() zu dimensionieren. Dimensioniert man var() zu hoch, ist es noch kein Problem, solange nicht irgendein Speicher-Manager Protest schreit. Dimensioniert man es aber zu klein, kommt es schnell zu einem Überlauf mit entsprechender Fehlermeldung.

    Gruß, Michael
     
    miriki, 29. Juni 2009
    #2
  3. mooqoo Neuer User
    Hallo miriki,
    danke für die schnelle Antwort!
    Nun gibt er mir bei folgendem Code:
    Code:
    Private Sub Duplicate()
    
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim strSQL As String
    Dim var(1000) As String
    
    Set db = CurrentDb
    strSQL = "SELECT Controlling_Area FROM Controlling_Area"
    Set rs = db.OpenRecordset(strSQL)
    
    If Not rs.EOF Then rs.MoveFirst
    
    cnt = 0
    Do While Not rs.EOF
        cnt = cnt + 1
        var(cnt) = rs!Controlling_Area
        rs.MoveNext
    Loop
    rs.Close
    Set rs = Nothing
    Set db = Nothing
    
    End Sub
    In der Zeile var(cnt) = rs!Controlling_Area die Fehlermeldung "Unzulässige Verwendung von Null". Ich habe weniger Daten in der Spalte also das Array groß ist.

    Weißt du wie ich das Problem lösen kann?
    Gibt es auch dynamische Arrays in VBA?
     
    mooqoo, 29. Juni 2009
    #3
  4. miriki Erfahrener User

    Spalte in Array speichern

    Oh, ok... Da würd ich Dir eine kleine Sicherheitsmaßnahme empfehlen:
    Code:
    var(cnt) = trim$(rs!Controlling_Area & " ")
    Ok, den Fehler hab ich jetzt provoziert, weil "var" jetzt nicht mehr als Variant, sondern explizit als String deklariert ist. Und in einem String kann kein Null-Wert gespeichert werden.

    Mit obigem a) Anhängen eines Leerzeichens und b) Entfernen von Leerzeichen am Anfang und Ende umgehst Du aber das Problem und vermeidest weiterhin den lästigen Variant-Datentyp.

    Ich glaube, ja. Da ich diese Dinger aber schon zu Pascal / Delphi-Zeiten nicht gemocht habe, habe ich sämtliche Hinweise darauf in der VBA-Welt erst recht geflissentlich ignoriert.

    Mag mein persönliches, unbegründetes Vorurteil sein, aber: Dynamische Arrays sind nür üble Hacks und ich wünsche allen Benutzern wild durch die Speicherwelt herumirrende Pointer auf die Array-Elemente... ;-)

    Gruß, Michael
     
    miriki, 29. Juni 2009
    #4
  5. miriki Erfahrener User
    Sollte es gewünscht sein, daß "leere" Werte gar nicht erst im Array gespeichert werden, wäre hier auch der passende Ansatz:
    Code:
    dim wrt as string
    [...]
    cnt = 0
    Do While Not rs.EOF
        wrt = trim$(rs!Controlling_Area & " ")
        if (wrt<>"") then
            cnt = cnt + 1
            var(cnt) = wrt
        endif
        rs.MoveNext
    Loop
    die Variable "cnt" enthält dann die Anzahl der "gefüllten" Werte, nicht die Gesamtzahl der Datensätze. Je nachdem...

    Gruß, Michael
     
    miriki, 29. Juni 2009
    #5
Thema:

Spalte in Array speichern

Die Seite wird geladen...
  1. Spalte in Array speichern - Similar Threads - Spalte Array speichern

  2. Benutzerdefinierte Spalte anhand von Bedingungen in Powerquery

    in Microsoft Excel Hilfe
    Benutzerdefinierte Spalte anhand von Bedingungen in Powerquery: Hallo zuammen, ich habe eine Beispieldatei angehängt. Ich habe Rohdaten mit mehreren Spalten. Spalte "Text" ist jedoch unvollständig. Die unvollständigen Zellen möchte ich via Powerquery...
  3. Matrix zeilenweise durchlaufen, Vorhandene Daten in eine Spalte schreiben

    in Microsoft Excel Hilfe
    Matrix zeilenweise durchlaufen, Vorhandene Daten in eine Spalte schreiben: Guten Tag, ich habe eine Datei mit einer 12x340 Matrix diese muss für einen weiteren Arbeitsschritt komplett in eine Spalte umgewandelt werden. Google, Youtube und die Suchfunktion hier konnten...
  4. Inteligente Tabelle Spalte als Array einlesen

    in Microsoft Excel Hilfe
    Inteligente Tabelle Spalte als Array einlesen: Hallo miteinander, ich habe eine Intelligente Tabelle mit dem Namen "tab_Muster" im Arbeitsblatt "Tabelle1" liegen. Aus dieser Tabelle möchte ich die Spalte "Soll eingelesen werden" als Array im...
  5. In einer Array mehrere Spalten gleichzeitig ansprechen

    in Microsoft Excel Hilfe
    In einer Array mehrere Spalten gleichzeitig ansprechen: Guten Tag , gibt es die Möglichkeit in einer Array mehrere Spalten gleichzeitig anzusprechen? Code: arr = Range("U1:KM" & LZ).Value For z = 1 To UBound(arr, 1) arr(z, 10) = "" arr(z, 11) = ""...
  6. Eine Spalte aus mehrdimensionales Array in Spalte ausgeben

    in Microsoft Excel Hilfe
    Eine Spalte aus mehrdimensionales Array in Spalte ausgeben: Hallo Zusammen, ich habe ein Mehrdimensionales Array arr(1 to 6, 1 to x) was sich dynamisch erstellt. Ich möchte jetzt alle Daten aus Spalte 2 (erste Dimension) in die erste Spalte meiner...
  7. Mehrere Spalten in ein mehrdimensionale Array laden

    in Microsoft Excel Hilfe
    Mehrere Spalten in ein mehrdimensionale Array laden: Hallo miteinander, ich habe verstanden wie ich eine Spalte aus einem ListObjects in ein Array speichern kann, auf ein mal. Doch wie mache ich das wenn ich mehrere Spalten gleichzeitig in das...
  8. Maximalwert aus einer Array-Spalte auslesen

    in Microsoft Excel Hilfe
    Maximalwert aus einer Array-Spalte auslesen: Hallo, Ich habe ein Array mit mehreren Spalten. Nun würde ich gerne den Maximalwert aus der ersten Spalte meines Array's auslesen. Mein unterer Code ließt den Maximalwert aus dem ganzen Array...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden