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

Forumthread: mehrdimensionale Arrays an Prozedur übergeben

mehrdimensionale Arrays an Prozedur übergeben
15.07.2005 08:46:02
Ulli
Hallo,
wie deklariere ich in einem funktionskopf ein mehrdimensionales Array? Möchte dieser Funktion nämlich gerne ein solches übergeben
Ich möchte, zB text(1 to 10, 1 to 5) an die Funktion zB sub ausgabe(?) übergeben. Was muss jetzt in den Klammern stehen? Und was steht im Aufruf [Call ausgabe(?)]?
Danke,
Ulli
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: mehrdimensionale Arrays an Prozedur übergeben
15.07.2005 09:03:39
MichaV
Hi,
gar nicht!

Sub bla()
Dim t(1 To 10, 1 To 10)
t(1, 1) = "Feld 1,1"
t(5, 5) = "Feld 5,5"
ArrayÜbergeben (t)
End Sub


Sub ArrayÜbergeben(t)
MsgBox t(1, 1) & vbCrLf & t(5, 5)
End Sub

Gruss- Micha
Anzeige
dyn, mehrdimensionale Arrays an Prozedur übergeben
15.07.2005 09:09:24
Ulli
und jetzt die erweiterung: wie kann ich _dynamische_ mehrdimensionale arrays übergeben?
zB text(1 to anz, 1 to 10)?
Ich weiß nämlich erst zum unter-prozeduraufruf, wie groß das zu übergebende Array ist...
Ulli
ReDim
15.07.2005 09:13:01
Galenzo
siehe Hilfe
AW: ReDim
15.07.2005 09:22:24
MichaV
Hi,
das geht aber nur, wenn er dann in der aufrufenden Prozedur nicht mehr mit dem Array weiterarbeitet. Das will er aber bestimmt. Dann fällt mir dazu nur ein:

Sub bla()
Dim t()
t = ArrayÜbergeben(t)
t(1, 1) = "Feld 1,1"
t(5, 5) = "Feld 5,5"
t = ArrayÜbergeben(t)
End Sub


Function ArrayÜbergeben(t)
'Grenzen von t festlegen
ReDim Preserve t(1 To 100, 1 To 10)
MsgBox t(1, 1) & vbCrLf & t(5, 5)
ArrayÜbergeben = t
End Function

Gruss- Micha
Anzeige
AW: dyn, mehrdimensionale Arrays an Prozedur übergeben
15.07.2005 09:28:23
MichaV
Hi,
"zB text(1 to anz, 1 to 10)"
ist dann aber schon eine Ecke schwieriger, weil Du mit ReDim nur die letzte Dimension ändern kannst. Die erste Dimension kannst Du bei 2-D-Feldern auch ändern, aber nur über einen kleinen Umweg.
Gruss- Micha
AW: mehrdimensionale Arrays an Prozedur übergeben
15.07.2005 09:06:21
Galenzo
z.B. so:
Dim arr(2, 2) As Integer
arr(2, 2) = 12
test arr
Sub test(Feld As Variant)
MsgBox Feld(2, 2)
Viel Erfolg!
Anzeige
AW: mehrdimensionale Arrays an Prozedur übergeben
17.07.2005 11:15:18
Ralf
Hi Ulli,
Du kannst das Problem mit mehrdimensionalen Arrays ganz elegant durch benutzerdefinierte Datentypen umgehen. Definiere den Datentyp in einem globalen Modul. Bsp.:
'MainModul:
'Typ definieren
Type DoubleDimension
Dimension1 As Integer
Dimension2 As Integer
End Type
'Ein x-beliebiges Modul:

Sub feld()
Dim aFeld() As DoubleDimension, x%, y%
For x = 0 To 10
ReDim Preserve aFeld(x)
aFeld(x).Dimension1 = x
aFeld(x).Dimension2 = x + 1
y = RechneMal(aFeld(x).Dimension1) + RechneMal(aFeld(x).Dimension2)
MsgBox y
Next x
End Sub


Function RechneMal(Wert As Integer) As Integer
RechneMal = Wert
End Function

Ich hoffe, das hilft Dir weiter.
Ciao, Ralf
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Mehrdimensionale Arrays in VBA übergeben


Schritt-für-Schritt-Anleitung

Um ein mehrdimensionales Array in VBA an eine Prozedur zu übergeben, musst du die folgenden Schritte befolgen:

  1. Array deklarieren: Erstelle ein mehrdimensionales Array in deiner Subroutine.

    Dim t(1 To 10, 1 To 5) As String
  2. Daten füllen: Fülle das Array mit Werten.

    t(1, 1) = "Feld 1,1"
    t(5, 5) = "Feld 5,5"
  3. Array übergeben: Rufe die Subroutine auf und übergebe das Array.

    Call ArrayÜbergeben(t)
  4. Prozedur erstellen: Definiere die Subroutine, die das Array empfängt.

    Sub ArrayÜbergeben(arr As Variant)
       MsgBox arr(1, 1) & vbCrLf & arr(5, 5)
    End Sub

Häufige Fehler und Lösungen

  • Fehler: Typenkonflikt: Wenn du versuchst, ein mehrdimensionales Array an eine Funktion zu übergeben, ohne den Typ korrekt zu definieren, kann es zu einem Typenkonflikt kommen. Stelle sicher, dass die Parameterübergabe als Variant deklariert ist.

  • Lösung: Benutze Variant: Verwende As Variant in der Prozedur, um Typkonflikte zu vermeiden.

  • Fehler: Dynamische Arrays: Wenn du ein dynamisches mehrdimensionales Array verwenden möchtest, kannst du es mit ReDim deklarieren. Achte darauf, dass nur die letzte Dimension mit ReDim geändert werden kann.


Alternative Methoden

Eine alternative Methode zur Übergabe von mehrdimensionalen Arrays ist die Verwendung von benutzerdefinierten Datentypen. Hier ist ein Beispiel:

  1. Definiere den Datentyp:

    Type DoubleDimension
       Dimension1 As Integer
       Dimension2 As Integer
    End Type
  2. Erstelle ein Array des benutzerdefinierten Typs:

    Dim aFeld() As DoubleDimension
  3. Fülle das Array und übergebe es:

    For x = 0 To 10
       ReDim Preserve aFeld(x)
       aFeld(x).Dimension1 = x
       aFeld(x).Dimension2 = x + 1
       Call Test(aFeld)
    Next x
  4. Definiere die Test-Prozedur:

    Sub Test(feld As DoubleDimension)
       MsgBox feld.Dimension1 & " - " & feld.Dimension2
    End Sub

Praktische Beispiele

Hier sind einige praktische Beispiele für die Verwendung von mehrdimensionalen Arrays in Excel VBA:

  • Zweidimensionales Array:

    Sub BeispielZweidimensional()
       Dim arr(1 To 2, 1 To 2) As Integer
       arr(1, 1) = 1
       arr(2, 2) = 2
       Call Test(arr)
    End Sub
    
    Sub Test(arr As Variant)
       MsgBox arr(1, 1) & ", " & arr(2, 2)
    End Sub
  • Dynamisches Array:

    Sub BeispielDynamisch()
       Dim t() As String
       ReDim t(1 To 5, 1 To 5)
       t(1, 1) = "Test"
       Call ArrayÜbergeben(t)
    End Sub

Tipps für Profis

  • Verwende ReDim Preserve: Wenn du die Größe eines Arrays ändern möchtest, kannst du ReDim Preserve verwenden, um die bestehenden Daten zu erhalten.

  • Achte auf die Dimensionen: Bei mehrdimensionalen Arrays in VBA solltest du sicherstellen, dass du die richtige Dimension beim Aufruf der Prozeduren verwendest, da nur die letzte Dimension dynamisch geändert werden kann.

  • Debugging: Setze Haltepunkte und verwende die Debug.Print-Funktion, um den Inhalt des Arrays während der Laufzeit zu überprüfen. Dies hilft dir, mögliche Fehler schneller zu identifizieren.


FAQ: Häufige Fragen

1. Wie kann ich ein dynamisches mehrdimensionales Array erstellen?
Du kannst ein dynamisches mehrdimensionales Array erstellen, indem du es ohne Dimensionen deklarierst und dann ReDim verwendest, um die Größe festzulegen.

2. Kann ich mehrdimensionale Arrays in Excel VBA füllen?
Ja, du kannst mehrdimensionale Arrays in Excel VBA füllen, indem du die entsprechenden Indizes verwendest, um Werte zuzuweisen.

3. Was ist der Unterschied zwischen einem Variant und einem spezifischen Array-Typ?
Der Typ Variant erlaubt die Übergabe von Arrays ohne feste Typdefinition, wohingegen spezifische Array-Typen eine strengere Typprüfung erfordern und somit effizienter sind.

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