Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
816to820
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
816to820
816to820
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

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

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
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
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
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

9 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige