Freigeben über

Excel VBA Array Werte verschwinden

Anonym
2017-01-26T08:38:10+00:00

Hallo, NG,

ich habe hier ein ganz komisches Problem. Ich habe ein Array, das ich mit Werten in einer Schleife befülle:

    For cntZaehler = 1 To intZeilen

            If Len(rng.Cells(cntZaehler, 1).Text) > 3 Then

                X = X + 1

                ReDim strPruefung(X)

                strPruefung(X) = rng.Cells(cntZaehler, 1).Text

                Debug.Print strPruefung(X)

            End If

    Next

               MsgBox strPruefung(5)

Über den Befehl Debug.Print innerhalb der Schleife kriege ich alle gefundenen Werte angezeigt, d. h. ich gehe davon aus, dass sie jeweils im entsprechenden Feld gespeichert sind. Ich bekomme etwa 50 verschiedene Werte, d. h. strPruefung(1) bis strPruefung(50) sollten Werte gespeichert haben.

Nach der Schleife habe ich (nur wegen der besseren Lesbarkeit) die Msgbox eingefügt, um zu überprüfen, ob einzelne Felder Werte haben - was ich ja eigentlich schon innerhalb der Schleife verifiziert habe. Aber, wenn ich nicht gerade das letzte Feld angebe, bleibt die Messagebox immer leer. Wie kann das sein, dass die Werte außerhalb der Schleife nicht mehr da sind? Wäre super, wenn jemand das Problem kennt, ich zerbreche mir schon geraume Zeit darüber den Kopf.

Gruß

Susanne

Microsoft 365 und Office | Excel | Für Zuhause | Windows

Gesperrte Frage. Diese Frage wurde aus der Microsoft-Support-Community migriert. Sie können darüber abstimmen, ob sie hilfreich ist, aber Sie können keine Kommentare oder Antworten hinzufügen oder der Frage folgen.

0 Kommentare Keine Kommentare

2 Antworten

Sortieren nach: Am hilfreichsten
  1. Andreas Killer 144.1K Zuverlässigkeitspunkte Freiwilliger Moderator
    2017-01-26T11:24:54+00:00

    Über den Befehl Debug.Print innerhalb der Schleife kriege ich alle gefundenen Werte angezeigt, d. h. ich gehe davon aus, dass sie jeweils im entsprechenden Feld gespeichert sind. Ich bekomme etwa 50 verschiedene Werte, d. h. strPruefung(1) bis strPruefung(50) sollten Werte gespeichert haben.

    Du solltest Dich mal mit dem Debugger beschäftigen (Mit F8 den Code schrittweise ausführen, Shift_F9 Variablen überwachen, etc.)

    Bei welchem Fehler fang ich an... da:

      ReDim strPruefung(X)

    Dieses ReDim erzeugt ein neues Array(Von bis X), das Array ist danach mit 0 gefüllt, sprich leer.

    Die Werte bleiben jedoch nur erhalten wenn man ReDim ein Preserve kommt.

    Wenn Du Preserve benutzt, dann muss das Array vorher schon einen Inhalt haben, ansonsten gibt es einen Fehler.

    Daher initialisiert man es via strPruefung = Array() was mich zum Nächsten bringt:

    Dein X ist vermutlich nicht initialisiert, daher auch 0 und bei der ersten Zuweisung machst Du X=X+1

    Dein Array ist aber 0..X, d.h. das erste Feld im Array wird bei Dir nie benutzt.

    Es seid denn Du hast Option Base 1 im Modul gesetzt.

    Damit hast Du ggf. ein echtes Problem:

      If Len(rng.Cells(cntZaehler, 1).Text) > 3 Then

      strPruefung(X) = rng.Cells(cntZaehler, 1).Text

    Du hast bestimmt schon mal eine Zelle gesehen die "####" zeigt und die .Text Eigenschaft liefert Dir in diesem Fall das #### statt des eigentlichen Inhaltes. Nimm die .Value Eigenschaft.

    Langsam ist das ganze auch, aber bei 50 Werten... naja, da lohnt keine Optimierung.

    Und wie geht's jetzt weiter? Postest Du mal das ganze Makro?

    Andreas.

    War diese Antwort hilfreich?

    0 Kommentare Keine Kommentare
  2. Anonym
    2017-01-26T11:12:57+00:00

    Hallo Susanne,

    probiere es mal mit:

    ReDim Preserve strPruefung(X)

    Claus

    War diese Antwort hilfreich?

    0 Kommentare Keine Kommentare