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

Forumthread: Syntax für Arrays als Parameter einer Funktion

Syntax für Arrays als Parameter einer Funktion
01.07.2004 13:41:18
eknarx
In der Hilfe Datei von VBA steht, dass man seit VBA 6 Arrays als Parameter übergeben kann und dass diese auf eine besondere Art und Weise eingebunden werden müssen. Das Beispiel sieht so aus:

Sub BeliebigeAnzArg (strName As String, ParamArray intPunkte() As Variant)
[Anweisungen]
End Sub

Der Aufruf erfolgt in dem Beispiel folgendermaßen:
BeliebigeAnzArg "Mona", 10, 26, 32, 15, 22, 24, 16
---
Meine Funktion sieht ungefähr so aus:
Public

Function Rekursion(zahl, pos, ParamArray permutationen() As Variant)
[Anweisungen]
End Function

Und aufrufen möchte ich sie, indem ich den Array als ganzes und nicht die einzelnen Werte als Argumente benutze. Also sowas in die Richtung:
Rekursion = Rekursion(zahl, pos, permutationen)
Dabei erhalte ich jedoch immer die Fehlermeldung, dass "das Argument nicht optional ist". Wie sieht den die Sytax für so einen Fall aus?
Dank im voraus,
Eknarx
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Syntax für Arrays als Parameter einer Funktion
Hans
Das ParamArray-Verfahren gibt die Möglichkeit eine Funktion variabel in der Ausstattung mit Argumenten zu machen. Das ist bei Deinem Problem gar nicht angezeigt.
Ein Array ist ein Datenfeld und benötigt EINEN Übergabe-Parameter - das hat nix mit ParamArray zu tun. Streiche es ersatzlos....
BTW: Ich kann mir nur ganz schwer eine Rekursion auf einem Array vorstellen. Auch eine Art Speicherplatz nieder zu machen ;-)
Gruß HW
Anzeige
AW: Syntax für Arrays als Parameter einer Funktion
01.07.2004 15:18:46
eknarx
Vielen Dank für diesen Hinweis Hans. Die Größe des übergebenen Datenfeldes muss tatsächlich nicht dynamisch sein.
Das sich ein Datenfeld einfach so als Parameter übergeben lässt hatte ich eigentlich auch gedacht. Allerdings habe ich gar keine bis kaum Erfahrung mit VBA und vorher habe ich es auch nicht ohne ParamArray hinbekommen (deswegen hatte ich ja überhaupt erst nachgeguckt).
Kannst du mir vielleicht in drei Zeilen kurz die korrekte Übergabe eines Arrays an eine Funktion/Porzedur demonstrieren? Wäre echt nett :).
--
Wegen dem Array und der Rekursion: Den Original Algrhytmus habe ich in PHP geschrieben. Der sieht so aus:

function sum($arr) {
$sum = 0;
for ($i = 0; $i $sum += $arr[$i];
}
return $sum;
}
function debug($permutationen) {
print implode(" ", $permutationen)."
";
// Anweisungen für die weitere Berechnung
}
function compute($permutationen, $zahl, $pos) {
for ($it = $zahl; $it >= 0; $it--) {
$permutationen[$pos] = $it;
$sum = sum($permutationen);
if ($sum == 10) debug($permutationen);
$rest = 10 - $sum;
if ($rest > 0 && $pos compute($permutationen, $rest, $pos + 1);
}
}
}
$permutationen = array(0,0,0,0,0,0);
compute($permutationen, 10, 0);
?>
Das ganze liefert mir dann die 3003 verschiedenen Permutationen dieses sechsstelligen Arrays, wobei die Quersumme immer 10 ergeben soll.
10 0 0 0 0 0
09 1 0 0 0 0
09 0 1 0 0 0
etc.
Das brauch ich für so eine Art Prognoserechnung. Auf 'ne bessere Lösung um diese PErmutationen zu erhalten, bin ich nicht gekommen.
Anzeige
AW: Syntax für Arrays als Parameter einer Funktion
Hans
Zum Berechnen von Permutationen empfehle ich dir unsere Website . Rekursionen dazu werden zwar gerne angeboten sind aber wenig geeignet. Vorallem müssen dann ja alle Permutationen auf einen Rutsch berechnet werden und man erhält bei größeren Zahlen dann gerne einen Stack-Überlauf (64 K bei VBA). Sinnvoller ist es einen lexigaphischen Ansatz zu wählen und immer nur "die nächste" Permuation zu berechnen.
Zur Array-Frage findest Du hier im Archiv und in der OH alles was Du brauchst. Vereinfacht gesagt setzt man den Datentyp Variant zur Übergabe von Feldern ein.
BTW: Was soll bitte bei einem Array aus lauter 0en permutiert werden? 6! = 720 und was spielt dabei die Zahl 3003 für eine Rolle?
Gruß HW
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

Syntax für Arrays als Parameter einer Funktion


Schritt-für-Schritt-Anleitung

Um ein Array als Parameter in einer VBA-Funktion zu übergeben, kannst du das ParamArray-Verfahren verwenden. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Definiere die Funktion: Erstelle eine Funktion mit einem ParamArray-Parameter. Beispiel:

    Sub BeliebigeAnzArg(strName As String, ParamArray intPunkte() As Variant)
       ' [Anweisungen]
    End Sub
  2. Rufe die Funktion auf: Du kannst die Funktion wie folgt aufrufen:

    BeliebigeAnzArg "Mona", 10, 26, 32, 15, 22, 24, 16
  3. Verwende das Parameter-Array: In der Funktion kannst du auf die übergebenen Werte zugreifen, als ob sie in einem Array gespeichert wären.

  4. Beispiel für die Rekursion: Wenn du eine Funktion mit einem Array anrufen möchtest, kannst du so vorgehen:

    Public Function Rekursion(zahl As Integer, pos As Integer, ParamArray permutationen() As Variant)
       ' [Anweisungen]
    End Function
    
    Rekursion = Rekursion(zahl, pos, permutationen)

Häufige Fehler und Lösungen

Ein häufiger Fehler beim Übergeben von Arrays in VBA ist die Fehlermeldung "das Argument ist nicht optional". Hier sind einige Lösungen:

  • Überprüfung der Parameter: Stelle sicher, dass du den Parameter korrekt definiert hast. Ein Array benötigt in der Regel einen Übergabeparameter, der als Variant deklariert ist.

  • Verwendung von ParamArray: Wenn du eine Funktion mit einem variablen Anzahl von Argumenten erstellen möchtest, nutze ParamArray. Achte darauf, dass das Array korrekt übergeben wird.

  • Fehlermeldung beheben: Wenn du die Fehlermeldung erhältst, überprüfe, ob du das Array korrekt an die Funktion übergibst. Es sollte als Ganzes übergeben werden.


Alternative Methoden

Wenn du mit Arrays in VBA arbeitest, gibt es alternative Methoden, um diese zu übergeben:

  • Standard-Array-Übergabe: Du kannst ein reguläres Array übergeben, indem du es einfach als Parameter definierst:

    Sub BeispielArray(arr() As Variant)
      ' [Anweisungen]
    End Sub
  • Benutzung von Variant: Verwende den Datentyp Variant, um mehr Flexibilität bei der Übergabe von Arrays zu haben.


Praktische Beispiele

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

  1. Berechnung von Summen:

    Function SummeArray(arr() As Variant) As Double
       Dim sum As Double
       Dim i As Integer
       For i = LBound(arr) To UBound(arr)
           sum = sum + arr(i)
       Next i
       SummeArray = sum
    End Function
  2. Rekursive Funktion:

    Function Rekursion(zahl As Integer, pos As Integer, ParamArray permutationen() As Variant)
       ' Rekursionslogik hier
    End Function

In diesen Beispielen siehst du, wie du ein vba array as parameter effektiv nutzen kannst.


Tipps für Profis

  • Verwende Option Base 1: Standardmäßig beginnt die Indexierung von Arrays in VBA bei 0. Mit Option Base 1 kannst du die Indizes auf 1 setzen, wenn notwendig.

  • Optimierung der Leistung: Achte darauf, große Arrays effizient zu verarbeiten, um einen xverweis überlauf zu vermeiden, insbesondere bei rekursiven Funktionen.

  • Debugging-Tools nutzen: Verwende die Debugging-Tools von VBA, um Fehler bei der Übergabe von Parametern zu identifizieren.


FAQ: Häufige Fragen

1. Wie kann ich ein mehrdimensionales Array übergeben?
Du kannst mehrdimensionale Arrays ähnlich wie eindimensionale Arrays übergeben, indem du den Typ Variant oder ParamArray verwendest.

2. Was ist der Unterschied zwischen ParamArray und regulären Arrays?
ParamArray ermöglicht es dir, eine variable Anzahl von Argumenten zu übergeben, während reguläre Arrays eine feste Größe haben und vorher definiert werden müssen.

3. Kann ich ein Array von Objekten übergeben?
Ja, du kannst ein Array von Objekten übergeben, indem du den Datentyp Object oder Variant verwendest.

4. Wie rufe ich eine VBA-Funktion mit einem Array als Parameter auf?
Verwende einfach die Funktion, indem du das Array als Argument übergibst, z.B. FunctionName(myArray).

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige