Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Array in Modul füllen und in Userform nutzen

Forumthread: Array in Modul füllen und in Userform nutzen

Array in Modul füllen und in Userform nutzen
Christoph
Hallo
ich hoffe ihr könnt mir helfen.
Ich haben ein Modul in dem ich ein variables Array fülle. Dann rufe ich in dem Modul ein Userform auf mit .show und möchte nun die Daten aus dem Array in eine Listbox füllen.
Wenn ich das Array anspreche (ArrayFehlerName(1)) bekomme ich immer den Laufzeitfehler 9 " Index außerhalb gültigem Bereich".
Zuerst dachte ich es liegt an der Public deklaration, aber ich habe das Array im Makro als Public in der ersten Zeile deklariert.
Public ArrayFehlerName()
Danke für die Hilfe.
Anzeige
AW: Array in Modul füllen und in Userform nutzen
15.07.2010 16:51:12
ransi
HAllo
Ist dein Array denn überhaupt gefüllt ?
ransi
AW: Array in Modul füllen und in Userform nutzen
15.07.2010 17:05:25
Christoph
Das Array ist auf jeden fall gefüllt, denn wenn ich es im Modul selbst anspreche bekomme ich die Werte zurück.
AW: Array in Modul füllen und in Userform nutzen
15.07.2010 20:02:03
Oberschlumpf
Hi Christoph
Ich hatte auch schon mal eine Variable, die ihre Werte nicht "mitnahm", obwohl ich sie eigtl mit Public allen Modulen verfügbar machte.
Bei mir war der Grund, dass mein Code aus mehreren allgemeinen Modulen bestand, und die Public-Zeile MUSSTE in Modul1 stehen - danach funzte alles.
Wenn auch ich erfolglos im Trüben fischte, dann zeig uns deine Datei doch mal.
Konnte ich denn helfen?
Ciao
Thorsten
Anzeige
AW: Array in Modul füllen und in Userform nutzen
15.07.2010 23:14:32
Nepumuk
Hallo Thorsten,
na das wage ich aber stark zu bezweifeln. Meine öffentlichen Variablen, Konstanten und API-Funktionen befinden sich immer in einem Modul mit dem Namen bas_Declaration. Das ist im aktuellen Projekt das 12. Modul. Und egal ob in Excel, VB6.0 oder VB.net, ich hatte die letzten 15 Jahre noch nie Probleme damit, dass das nicht das erste Modul war.
Gruß
Nepumuk
Anzeige
AW: Array in Modul füllen und in Userform nutzen
16.07.2010 06:01:43
Oberschlumpf
Moin
Ich nahm aber keine andere Änderung vor, außer, dass ich besagte Public-Vars aus allg. Modul xy in Modul1 verschob.
Das war die einzige Code-Änderung - dann funzte alles.
Mein Vorschlag war auch nur als solcher, und nicht als DIE einzig, richtige Lösung gedacht.
Ciao
Thorsten
Anzeige
AW: Array in Modul füllen und in Userform nutzen
16.07.2010 08:02:51
Nepumuk
Hallo Thorsten,
seltsam verschlungen sind oft die Wege des Erfolges. ;-)
Gruß
Nepumuk
wohl wahr, wohl wahr ;-) owT
16.07.2010 09:21:46
Oberschlumpf
ohne Public Array
16.07.2010 08:47:20
Tino
Hallo,
Du kannst die Listbox auch direkt aus einem Modul füllen und
danach erst die Userform aufrufen.
Zu beacheten ist bei With UserForm1 wird die Userform initialisiert und eventuell
das Event UserForm_Initialize in der Userform wird ausgeführt.
Beispiel:
With UserForm1 'initialisiert die Userform
.ListBox1.List = myArr 'Listbox mit Daten füllen (nur Bsp.)
.Show 'Userform aufrufen
End With
Gruß Tino
Anzeige
AW: Array in Modul füllen und in Userform nutzen
17.07.2010 16:05:47
Christoph
Hallo,
danke an alle die Lösungen genannt haben.
Ich habe jetzt meinen Fehler gefunden.
Ich habe das Array im Modul definiert mit Dim Array, und das klappt anscheinend dann nicht mehr.
Christoph
Zusatz Info
18.07.2010 10:47:55
Tino
Hallo,
mit Dim ... im Kopf ist die Variable nur im aktuellen Modul gültig mit Public in der gesamten Arbeitsmappe.
Aber auch Dim ... wird wie Public nach Ablauf der Prozedur nicht zurückgesetzt!
Gruß Tino
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Array in Modul füllen und in Userform nutzen


Schritt-für-Schritt-Anleitung

  1. Deklaration des Arrays: Stelle sicher, dass du das Array als Public deklarierst, um es in der gesamten Arbeitsmappe zugänglich zu machen. Beispiel:

    Public ArrayFehlerName() As Variant
  2. Befüllen des Arrays: Fülle das Array in einer Prozedur. Das könnte so aussehen:

    Sub FillArray()
       ReDim ArrayFehlerName(1 To 3)
       ArrayFehlerName(1) = "Fehler 1"
       ArrayFehlerName(2) = "Fehler 2"
       ArrayFehlerName(3) = "Fehler 3"
    End Sub
  3. UserForm initialisieren: Rufe die UserForm auf und fülle die ListBox mit den Daten aus dem Array. Beispiel:

    Sub ShowUserForm()
       FillArray ' Stelle sicher, dass das Array zuerst gefüllt wird
       With UserForm1
           .ListBox1.List = ArrayFehlerName
           .Show
       End With
    End Sub

Häufige Fehler und Lösungen

  • Laufzeitfehler 9: Dieser Fehler tritt auf, wenn du versuchst, auf einen Index des Arrays zuzugreifen, der nicht existiert. Vergewissere dich, dass das Array korrekt gefüllt ist und dass du die richtigen Indizes verwendest.

  • Array nicht gefüllt: Wenn du das Array in einer anderen Prozedur füllst, stelle sicher, dass diese Prozedur vor dem Zugriff auf das Array aufgerufen wird.

  • Public-Deklaration: Wenn dein Array nicht in der gesamten Arbeitsmappe sichtbar ist, überprüfe, ob du es richtig als Public deklariert hast.


Alternative Methoden

Eine alternative Methode besteht darin, die ListBox direkt aus einem Modul zu füllen, bevor du die UserForm aufrufst. Hier ein Beispiel:

Sub FillListBoxDirectly()
    Dim myArr(1 To 3) As Variant
    myArr(1) = "Eintrag 1"
    myArr(2) = "Eintrag 2"
    myArr(3) = "Eintrag 3"

    With UserForm1
        .ListBox1.List = myArr
        .Show
    End With
End Sub

Diese Methode kann nützlich sein, wenn du das vba public array nicht nutzen möchtest.


Praktische Beispiele

Ein praktisches Beispiel ist das Füllen einer ListBox mit Fehlercodes:

Public FehlerCodes() As Variant

Sub FillErrorCodes()
    ReDim FehlerCodes(1 To 2)
    FehlerCodes(1) = "404 - Not Found"
    FehlerCodes(2) = "500 - Internal Server Error"
End Sub

Sub ShowErrorForm()
    FillErrorCodes
    With UserForm1
        .ListBox1.List = FehlerCodes
        .Show
    End With
End Sub

Hier wird ein vba global array verwendet, um die Fehlercodes anzuzeigen.


Tipps für Profis

  • Verwendung von ReDim Preserve: Um die Größe eines bereits gefüllten Arrays zu ändern und die bestehenden Werte beizubehalten, verwende ReDim Preserve. Beispiel:

    ReDim Preserve ArrayFehlerName(1 To 5)
  • Debugging: Nutze den Debugger, um den Inhalt deines Arrays zu überprüfen. Setze Haltepunkte und schaue dir die Werte an, bevor du die UserForm aufrufst.

  • Vermeidung von Magischen Zahlen: Verwende Konstanten oder Enums statt harter Kodierung von Werten, um die Wartbarkeit deines Codes zu erhöhen.


FAQ: Häufige Fragen

1. Warum bekomme ich einen Laufzeitfehler, wenn ich auf das Array zugreife?
Das kann passieren, wenn das Array nicht gefüllt ist oder du versuchst, auf einen Index zuzugreifen, der nicht existiert. Stelle sicher, dass das Array vor dem Zugriff korrekt befüllt wurde.

2. Wo sollte ich die Public-Deklaration platzieren?
Die Public-Deklaration sollte am Anfang deines Moduls stehen, damit das public array vba in allen Prozeduren des Moduls verfügbar ist.

3. Gibt es eine Möglichkeit, Arrays ohne Public zu nutzen?
Ja, du kannst auch lokale Arrays mit Dim in einer Prozedur deklarieren, jedoch sind diese nur innerhalb der Prozedur sichtbar.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige