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

Forumthread: Argument optional machen

Argument optional machen
13.11.2006 20:42:04
Christian
Hallo,
ich habe folgende Function, die mir die Subtotals einer tabelle berechnet:

Function subtotals(first As Integer, second As Integer)
Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(first, second), _
Replace:=True, PageBreaks:=False, SummaryBelowData:=True
End Function

Jetzt moechte ich aber die Funktion etwas flexibler gestalten. Kann man die Anzahl der uebergebenen Werte bspw. auf 5 erhoehen, aber nur immer soviele uebergeben wie ich gerade brauche.
Also im o.g. Fall 'first', 'second' (call subtotals(8, 11)) und in einem anderen Fall vielleicht 'first', 'second', 'third', 'fourth'(call subtotals(8, 11,14,16))
Geht sowas? Wenn ich null uebergebe bricht er ab.
Vielen Dank
Christian
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Argument optional machen
13.11.2006 20:54:38
Daniel
Hallo
ja das geht so:
Function subtotals(first As Integer, second As Integer, optional third as integer = 1, optional fourth as interger = 4)
d.h. OPIONAL davor schreiben, und den Wert zuweisen, den die Variable als Wert haben soll, wenn kein Wert übergeben wird.
Die mit Optional gekennzeichneten Werte brauchen also nicht übergeben zu werden.
In der Reihenfolge müssen die optionalen Parameter immer nach den Pflich-Parametern stehen.
Gruß, Daniel
Anzeige
AW: Argument optional machen
13.11.2006 21:18:23
Christian
Hallo Daniel,
also erstmal vielen dank.
Nur wie bringe ich jetzt das optionale Argument in das Array (TotalList). Wenn ich jetzt in den Funktionskopf eine optionales Argument schreibe moechte ich sie ja auch im Array benutzen, aber da erhalte ich folgende Fehlermeldung:
Subtotal method of range class failed
Gruss
Christian
Anzeige
AW: Argument optional machen
13.11.2006 21:50:16
Daniel
Hallo
sorry, mit der VBA-Funktion SUBTOTAL kenne ich mich leider nicht aus.
Hierzu vielleicht mal die Hilfe zu Rate ziehen.
Falls dir das nicht weiterhilft, bitte einen neuen Thread aufmachen und die Fragestellung nochmal überarbeiten.
Deine Eingangsfrage passt nicht so richtig zu deinem Problem.
btw. setzt du die Funktion als Formel in Excel ein oder wird sie nur innerhalb VBA von Makrors aufgerufen?
gruß, Daniel
Anzeige
AW: Argument optional machen
13.11.2006 22:22:21
Christian
ich verwende die Funktion in einem Makro
AW: Argument optional machen
13.11.2006 22:27:18
Matthias
Hallo Christian,
versuch mal das (ungetestet):

Function subtotals(first As Integer, second As Integer, Optional third, Optional fourth)
Dim arr()
If Not IsMissing(fourth) Then
arr = Array(first, second, third, fourth)
ElseIf Not IsMissing(third) Then
arr = Array(first, second, third)
Else
arr = Array(first, second)
End If
Debug.Print UBound(arr)
'    Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=arr, _
Replace:=True, PageBreaks:=False, SummaryBelowData:=True
End Function

Gruß Matthias
Anzeige
AW: Argument optional machen
13.11.2006 23:37:37
Daniel
Hallo
wenn es so geht, wäre es noch einfacher, die Daten mit ParamArray zu übergeben, dann können beliebig viele Werte übergeben werden:

Function subtotals(ParamArray arr() as variant)
Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=arr, _
Replace:=True, PageBreaks:=False, SummaryBelowData:=True
End Function

der Aufruf erfolgt dann
Call subtotals(first, second)
Call subtotals(first, second, third) usw
Gruß, Daniel
Anzeige
AW: Argument optional machen
14.11.2006 15:38:06
Christian
Hallo zusammen,
also erstmal vielen dank.
@Matthias: Dein Vorschlag funktioniert!
@Daniel: leider haut das nicht ganz hin, mit dem Paramarray. Ich erhalte beim Aufruf immer die Fehlermeldung "Invalid Paramarray use". Wenn ich das richtig verstehe sagt mir die Hilfe dann, dass ein anderer Typ erwartet wird!
Also momentan sieht es so aus:
...
Dim c1 As Variant
Dim c2 As Variant
Dim c3 As Variant
c1 = 7
c2 = 8
c3 = 11
Call subtotals(c1, c2, c3)
...

Function subtotals(ParamArray arr() As Variant)
Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=arr, _
Replace:=True, PageBreaks:=False, SummaryBelowData:=True
End Function

Viele Gruesse
Christian
Anzeige
AW: Argument optional machen
14.11.2006 21:07:05
Daniel
Hallo
dimensionier mal C1-C3 als LONG.
Dann müsste es gehen.
Gruß, Daniel
AW: Argument optional machen
15.11.2006 16:03:12
Christian
Hallo Daniel,
ich erhalte leider immer noch die gleiche Fehlermeldung. Gibt es noch eine andere Moeglichkeit?
Viele Gruesse
Christian
ParamArray Subtotal
15.11.2006 20:22:30
Reinhard
Hi Christian,
Frage noch offen, da Lösung eher workaround als Lösung:-)
Sub tt()
Dim c1 As Variant, c2 As Variant, c3 As Variant
c1 = 7
c2 = 8
c3 = 11
Call subtotal2(c1, c2, c3)
End Sub
Function subtotal2(ParamArray Zahl() As Variant)
Dim n
ReDim Z(UBound(Zahl()))
For n = 0 To UBound(Zahl)
Z(n) = Zahl(n)
Next n
Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Z(), _
Replace:=True, PageBreaks:=False, SummaryBelowData:=True
End Function

Gruß
Reinhard
ps: Ich freue mich über eine Rückmeldung ob diese Antwort hilfreich war oder nicht..
Anzeige
AW: Argument optional machen
15.11.2006 23:54:32
Daniel
Hallo,
tut mir leid, weder mit Subtotal noch mit ParamArray habe ich bisher gearbeitet.
Auf diesen Weg bin ich beim Lesen der Hilfe gestoßen, aber die Feinheiten kenn ich leider nicht. Kannst du bitte mal die Datei hochladen, so zum rumspielen?
Gruß, Daniel
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

Argumente in Excel VBA optional gestalten


Schritt-für-Schritt-Anleitung

Um in Excel VBA optionale Parameter zu verwenden, kannst Du die Optional-Schlüsselwörter im Funktionskopf nutzen. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Funktionskopf anpassen: Beginne damit, die Parameter in Deiner Funktion so anzupassen, dass einige von ihnen optional sind. Beispiel:

    Function subtotals(first As Integer, second As Integer, Optional third As Integer = 1, Optional fourth As Integer = 4)
  2. Argumente im Array verwenden: Um die optionalen Parameter in einem Array zu verwenden, kannst Du die IsMissing-Funktion einsetzen. Beispiel:

    Dim arr()
    If Not IsMissing(fourth) Then
       arr = Array(first, second, third, fourth)
    ElseIf Not IsMissing(third) Then
       arr = Array(first, second, third)
    Else
       arr = Array(first, second)
    End If
  3. Funktion aufrufen: Du kannst die Funktion nun mit beliebig vielen oder wenigen Argumenten aufrufen:

    Call subtotals(8, 11)            ' Nur zwei Argumente 
    Call subtotals(8, 11, 14, 16)    ' Vier Argumente

Häufige Fehler und Lösungen

  1. Fehlermeldung: "Argument ist nicht optional"
    Diese Fehlermeldung tritt auf, wenn Du versuchst, eine Funktion ohne die erforderlichen Parameter aufzurufen. Stelle sicher, dass Du nur die optionalen Parameter weglässt.

  2. Fehlermeldung bei der Verwendung von ParamArray:
    Wenn du ParamArray verwendest und eine Fehlermeldung wie "Invalid Paramarray use" erhältst, überprüfe den Typ der Variablen. Sie sollten als Variant deklariert sein:

    Function subtotals(ParamArray arr() As Variant)

Alternative Methoden

Eine Alternative zu optionalen Parametern ist die Verwendung von ParamArray. Dies ermöglicht eine flexible Anzahl von Argumenten. Hier ein Beispiel:

Function subtotals(ParamArray arr() As Variant)
    Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=arr, _
    Replace:=True, PageBreaks:=False, SummaryBelowData:=True
End Function

Mit dieser Methode kannst Du eine beliebige Anzahl von Werten übergeben, ohne sie im Funktionskopf angeben zu müssen.


Praktische Beispiele

Hier sind einige Beispiele für die Verwendung von optionalen Parametern in Excel VBA:

  1. Funktion mit festen und optionalen Parametern:

    Function subtotals(first As Integer, second As Integer, Optional third As Integer = 1)
       ' Berechnung der Subtotals
    End Function
  2. Funktion mit ParamArray:

    Function subtotals(ParamArray arr() As Variant)
       ' Verwendung von ParamArray für flexibles Argumenthandling
    End Function

Du kannst diese Funktionen in Makros verwenden, um die Berechnungen in Deinen Excel-Tabellen zu automatisieren.


Tipps für Profis

  • Verwende IsMissing: Um zu überprüfen, ob ein optionales Argument übergeben wurde, nutze die IsMissing-Funktion. So kannst Du sicherstellen, dass Deine Funktion korrekt funktioniert.
  • Dokumentiere Deine Funktionen: Füge Kommentare hinzu, um zu erklären, welche Parameter optional sind und welche Standardwerte sie haben.
  • Teste Deine Funktionen gründlich: Teste alle möglichen Kombinationen von Parametern, um sicherzustellen, dass Deine Funktion robust ist.

FAQ: Häufige Fragen

1. Was sind optionale Parameter in VBA?
Optionale Parameter sind solche, die nicht zwingend übergeben werden müssen, wenn eine Funktion aufgerufen wird. Du kannst ihnen Standardwerte zuweisen.

2. Wie verwende ich ParamArray richtig?
ParamArray ermöglicht es, eine variable Anzahl von Argumenten an eine Funktion zu übergeben. Stelle sicher, dass die Funktion als Variant deklariert ist.

3. Warum erhalte ich die Fehlermeldung "Argument ist nicht optional"?
Diese Fehlermeldung erscheint, wenn Du eine Funktion ohne die erforderlichen Parameter aufrufst. Achte darauf, nur optionale Parameter wegzulassen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige