Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
428to432
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
428to432
428to432
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Eigene Funktion in VBA verwenden

Eigene Funktion in VBA verwenden
13.05.2004 13:05:45
Dietrich
Hallo liebes Forum,
ich möchte in VBA selbstgeschriebene Funktionen (Public-Function) von einer Sub-Prozedur aufrufen, nur: Wie mache ich das?
In der Sub-Prozedur ermittle ich aus einer Excel-Datei einen String (Vertragsnummer). Dieser String ist bereits der Name der Funktion. Die Funktion benötigt einen Wert zur Berechnung, den ich auch aus der Tabelle bekomme.
Bislang übernehme ich die beiden Werte in Variablen in der Sub-Prozedur. Nun weiss ich allerdings nicht, wie ich
a) mit diesen Werten die eigene Funktion aufrufe
b) den Rückgabewert der Funktion in eine Variable schreibe, die ich dann zurück in die Zelle schreiben kann.
Das ganze läuft in einer For-Schleife, da mehrere Zeilen durchlaufen und mehrere Verträge berechnet werden müssen.
Ich habe im Archiv gesucht, aber wahrscheinlich die falschen Fragen gestellt...
Weiß jemand Rat?
Vielen Dank schonmal
Dietrich
Auszug aus Sub-Prozedur:
'Ermittlung der variablen Werte (Vertrag/Menge)
Vertrag = Workbooks(datei).Worksheets("Transfer").Range("f" & i).Value
Anzahl = Workbooks(datei).Worksheets("Transfer").Range("g" & i).Value
'Aufruf der Funktion (Betrag soll den Rückgabewert enthalten)
Betrag= "Hier weiss ich nicht weiter :-)"
Beispiel für die Funktion (ist Public, wird hier aber irgendwie immer abgeschnitten...):

Function CCIR47(Anzahl) As Currency
Select Case Anzahl
Case Is = ""
Exit Function
Case Is <= 5
Betrag = 575
CCIR47 = Betrag
Case Is > 5
Betrag = (Anzahl - 5) * 0,12235 + 575
CCIR47 = Betrag
End Select
End Function

In dem Beispiel entspräche
Vertrag aus Sub-Prozedur -> CCIR47
Anzahl aus Sub-Prozedur -> Anzahl aus Public Function

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

Betreff
Datum
Anwender
Anzeige
Betrag = CCIR47(Anzahl) - o.T.
13.05.2004 13:08:51
Matthias
:-)
AW: Betrag = CCIR47(Anzahl) - o.T.
13.05.2004 13:14:24
Dietrich
Hi Matthias,
das Problem ist, dass ich nicht CCIR47 eingeben kann, sondern die Variable Vertrag, die ich vorher mit dem Wert dem jeweiligen Zeilenwert (im Beispiel "CCIR47") 'befüllt' habe.
Wenn ich eingeben:
Betrag = Vertrag(Anzahl)
bekomme ich den Fehler: "Typen unverträglich"
Die Variable Anzahl funktioniert, da steht die Zahl drinnen. Wenn ich mit der Maus aber über "Vertrag" gehe, sagt die BubbleHelp "Vertrag(Anzahl) =
Hilft das weiter?
Gruß
Dietrich
AW: Betrag = CCIR47(Anzahl) - o.T.
13.05.2004 13:19:23
Matthias
Hallo Dietrich,
welchen Typ hat denn die Variable "Anzahl"?
Du Prüfst einmal auf String (Case Is "") und dann auf numerisch (Case Is &lt=5).
Deklariere die Variable als numerisch und prüfe statt Is "" auf 0.
Viel Erfolg,
Matthias
Anzeige
AW: Betrag = CCIR47(Anzahl) - o.T.
13.05.2004 13:32:39
Dietrich
Hi Matthias,
ich habe gerade mal den Vertrag per Hand eingetragen und da klappts.
Betrag = CCIR47(Anzahl)
Die Variable "Vertrag" ist GARNICHT deklariert. Ist ein Fehler, ich weiss ;-)
Wie deklariere ich "numerisch". Hab ich in der Hilfe nicht gefunden. Funktioniert das denn auch wenn Buchstaben im Namen sind?
Gruß
Dietrich
AW: Eigene Funktion in VBA verwenden
xXx
Hallo,
das ist etwas undurchsichtig. Es existiert also für jeden Vertrag eine eigene Fuction? Die kannst du imho nicht aufrufen. Schreibe dir eine Function, die als Argument die Vertragsnummer und die Anzahl braucht.

Function FuncBetrag(Vertrag, Anzahl)
Select Case Vertrag
Case "CCIR47"
Select Case Anzahl
Case Is = ""
Exit Function
Case Is <= 5
FuncBetrag= 575
Case Is > 5
FuncBetrag= (Anzahl - 5) * 0,12235 + 575
End Select
Case "CCIR48"
Select Case Anzahl
Case Is = ""
Exit Function
Case Is <= 5
FuncBetrag= 500
Case Is > 5
FuncBetrag = (Anzahl - 5) * 0,12235 + 500
End Select
'...usw.
End Select
End Function

In deinem Makro schreibst du einfach
Betrag=FuncBetrag(Vertrag, Anzahl)
Gruß aus'm Pott
Udo
http://www.excelerator.de
Anzeige
AW: Eigene Funktion in VBA verwenden
13.05.2004 13:35:24
Dietrich
Hi Udo,
ich hatte für jeden Vertrag eine Funkion, weil ich das "übersichtlicher" fand ;-)
Dein Tip ist prima! Vielleicht weiss Matthias ja noch ein Mittelchen gegen Typenunverträglichkeit (dann müsste ich nicht alle Verträge umbauen), ansonsten werd ich das auf jeden Fall ausprobieren!
Vielen Dank
Dietrich
AW: Eigene Funktion in VBA verwenden
13.05.2004 16:23:10
Dietrich
Hallo Udo,
funktioniert bestens!
Vielen Dank und Gruß an'n Pott :-)
Dietrich

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige