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

Forumthread: Array für mehrere Modulle

Array für mehrere Modulle
17.02.2007 14:00:00
Hans
Hallo,
ich möchte aus mehreren Modullen und UserForms auf ein und dasselbe Array zugreifen. Da ich das Array oft ändern bzw. erweitern muß, möchte ich es für alle allgemein vorsehen, um nicht jedes mal in den einzelnen Modullen und UserForms Änderungen vorzunehmen - kann man evtl. aus einer Liste aus einem Tabellenblatt dieses Array erstellen, wenn ja wie.
Mit der Pubic-Eigenschaft habe ich das irgendwie nicht hinbekommen. Geht das überhaupt?!?
Hier das benötigte Array:
Name = Array("Name1", "Name2", "Name3", "Name4", "Name5")
Gruß und schon mal danke für die Hilfe
Hans
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Array für mehrere Modulle
17.02.2007 14:22:57
Peter
Hallo Hans,
in einem allgemeinen Modul definierts du: Public aName As Variant
unter DieseArbeitsmappe, dort unter

Private Sub Workbook_Open()
aNamen = Array("Name1", "Name2", "Name3", "Name4", "Name5")
End Sub

Viele Grüße Peter
Eine kurze Nachricht, ob es läuft, wäre nett - danke.
Anzeige
AW: Array für mehrere Modulle
17.02.2007 14:22:57
Daniel
Hallo
wenn du das Array Modul-übergreifend einsetzen willst, mußt du es in einem allgemeinen Modul aber oberhalb der Prozeduren (dh. ganz oben, direkt unter OPTION EXPLICIT) als PUBLIC deklarieren
(die Pubic-Eigenschaft geht hier nicht, den sie bezeichnet genau das gegenteil ;-))
die Zuweisung der Werte kann dann in irgendeinem Makro erfolgen, es muß nur gewährleistet sein, daß die Zuweisung auf jeden Fall vor der ersten Verwendung des Arrays erfolgt.
Hier mal ein kleines Beispiel:

Option Explicit
Public arrTest
Sub Makro1()
arrTest = Array("A", "B", "C")
Call makro2
End Sub
Sub makro2()
Dim a
For Each a In arrTest
Cells(65000, 1).End(xlUp).Offset(1, 0).Value = a
Nex
End Sub

wenn sich das Array die Daten aus einer Exceltabelle holen soll, geht das auch ganz einfach mit
arrTest = range("A1:A14").value
das Array wird dabei automatisch auf die passenden Grösse dimensioniert.
Gruß, Daniel
Anzeige
AW: Array für mehrere Modulle
ransi
Hallo Hans
Versuch es mal so:


Unter dieseArbeitsmappe das hier:
Option Explicit
Private Sub Workbook_Open()
Call mach_Public
End Sub
Und in ein Modul das hier:
Option Explicit
Public arrName
Public Sub mach_Public()
arrName = Array("Name1""Name2""Name3""Name4""Name5")
End Sub

ransi
Anzeige
AW: Array für mehrere Modulle
17.02.2007 15:45:00
Hans
Aller guten Dinge sind drei. Dank euch - funktioniert super :o)
Daniel:

Sub Makro1()
arrTest = Sheets("Tabelle2").Range("A1:A11").Value
End Sub

-> funktioniert leider nicht. Was mach ich falsch?!?
Gruß Hans
AW: Array für mehrere Modulle
17.02.2007 15:52:20
Daniel
Hallo
keine Ahnung, bei mir gehts.
allerdings sind dein Angaben ein bisschen dürftig.
falls du mit OPTION EXPLICIT arbeitest (was zu empfehlen ist), wo und wie hast du arrTest deklariert?
Gruß, Daniel
Anzeige
AW: Array für mehrere Modulle
17.02.2007 16:14:00
Peter
Hallo Hans,
noch eine Variante:
Option Explicit
Public arrTest As Variant

Sub Alter_Test()
arrTest = Sheets("Tabelle2").Range("A1:K1").Value
MsgBox arrTest(1, 5)
End Sub

Ich meine die Tabelleneinträge dürfen nur waagerecht vorkommen.
Viele Grüße Peter
Eine kurze Nachricht, ob es läuft, wäre nett - danke.
Anzeige
AW: Array für mehrere Modulle
17.02.2007 16:19:00
Peter
Hallo Hans,
so geht es mit vertikalen Tabelleneinträgen:

Sub Erneuter_Versuch()
arrTest = Sheets("Tabelle2").Range("A1:A11").Value
MsgBox arrTest(5, 1)
End Sub

Viele Grüße Peter
Eine kurze Nachricht, ob es läuft, wäre nett - danke.
AW: Array für mehrere Modulle
17.02.2007 16:26:00
Daniel
Hallo
normalerweise gehts auch mit mehrspaltigen Zellbereichen:
Dim arrTEST
arrTest = Range("A1:K11").value
sollte funktionieren.
Gruß, Daniel
Anzeige
AW: Array für mehrere Modulle
17.02.2007 15:55:55
Peter
Hallo Hans,
so könnte es gehen:
Option Explicit
Public arrTest() As Variant

Sub Neuer_Versuch()
Dim iIndex  As Integer
For iIndex = 1 To 11
ReDim Preserve arrTest(iIndex)
arrTest(iIndex) = Sheets("Tabelle2").Range("A" & iIndex).Value
Next iIndex
MsgBox arrTest(5)
End Sub

Viele Grüße Peter
Eine kurze Nachricht, ob es läuft, wäre nett - danke.
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Array für mehrere Module in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Definiere das Array: Erstelle ein neues allgemeines Modul.
    • Füge folgenden Code ein, um ein öffentliches Array zu definieren:
      Option Explicit
      Public arrName As Variant
  3. Initialisiere das Array: Füge einen Code in das Workbook_Open-Ereignis ein, um das Array zu füllen.
    Private Sub Workbook_Open()
       arrName = Array("Name1", "Name2", "Name3", "Name4", "Name5")
    End Sub
  4. Zugriff von anderen Modulen: Du kannst nun von jedem Modul oder UserForm auf arrName zugreifen.

Häufige Fehler und Lösungen

  • Fehler: "Variable nicht definiert"

    • Stelle sicher, dass du das Array arrName oben im Modul als Public deklariert hast.
  • Fehler: Array wird nicht initialisiert

    • Überprüfe, ob das Workbook_Open-Ereignis korrekt ausgeführt wird. Du kannst dies testen, indem du einen MsgBox-Befehl hinzufügst.
  • Lösung bei Nutzung von Excel-Tabellen

    • Wenn du Daten aus einem Excel-Blatt in dein Array laden möchtest, verwende:
      arrTest = Sheets("Tabelle2").Range("A1:A11").Value

Alternative Methoden

  • Array aus einem Excel-Range definieren: Du kannst dein Array direkt aus einem Zellbereich definieren:

    arrTest = Range("A1:A14").Value

    Dies funktioniert automatisch, da das Array basierend auf der Größe des Bereichs dimensioniert wird.

  • Dynamische Arrays: Um ein dynamisches Array zu erstellen, verwende ReDim Preserve:

    ReDim Preserve arrTest(iIndex)
    arrTest(iIndex) = Sheets("Tabelle2").Range("A" & iIndex).Value

Praktische Beispiele

  • Beispiel 1: Initialisierung über Workbook_Open

    Private Sub Workbook_Open()
      arrName = Array("Name1", "Name2", "Name3", "Name4", "Name5")
    End Sub
  • Beispiel 2: Ausgabe in eine Zelle

    Sub TestArrayOutput()
      Dim i As Integer
      For i = LBound(arrName) To UBound(arrName)
          Cells(i + 1, 1).Value = arrName(i)
      Next i
    End Sub
  • Beispiel 3: Zugriff auf Zellwerte

    Sub GetCellValue()
      MsgBox arrTest(5, 1)
    End Sub

Tipps für Profis

  • Verwende Option Explicit: Das zwingt dich, alle Variablen zu deklarieren, was Fehler reduziert.
  • Initialisiere Arrays in Workbook_Open: So bist du sicher, dass dein Array vor der ersten Verwendung gefüllt ist.
  • Verwende Debug.Print: Dies hilft beim Testen und Debugging, um den Inhalt deines Arrays zu überprüfen.

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen einem öffentlichen und einem privaten Array? Ein öffentliches Array kann in allen Modulen und UserForms verwendet werden, während ein privates Array nur im Modul sichtbar ist, in dem es definiert wurde.

2. Wie kann ich ein mehrdimensionales Array definieren? Das geht so:

Public arrTest() As Variant

Dann kannst du es mit ReDim dynamisch anpassen.

3. Warum funktioniert mein Array nicht wie erwartet? Überprüfe die Deklaration und Initialisierung. Stelle sicher, dass das Array vor der ersten Verwendung richtig gefüllt wird.

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