Herbers Excel-Forum - das Archiv

UDF - Argument ohne " " übergeben möglich?

Bild

Betrifft: UDF - Argument ohne " " übergeben möglich?
von: Peter

Geschrieben am: 17.06.2008 23:03:06

Guten Abend
Ich habe eine Frage zu meiner benutzerdefinierten Funktion. Ich muss dieser Funktion 3 Argumente übergeben. Das zweite ist ein Bereichsname, den ich in Anführungszeichen einsetzen muss.
cw(G24;"_A";1)
Wäre es möglich, und wenn ja, wie ist es anzustellen, dass ich anstelle der obigen Schreibweise
cw(G24;_A;1), also den Bereichsnamen ohne Anführungszeichen schreiben kann. Allerdings reklamiert die Function schon, wenn ich bei Optional Periode as String = _A, "_" ... schreibe, dass das Sonderzeichen _ nicht genehm ist. Ansonsten hätte ich mir vorstellen können, dass ich _A übergebe und dann in der Funktion
der Variable "Periode" die Anführungszeichen wieder vor- und hintenanstelle. Dann müsste die Funktion insgesamt ja unverändert laufen.
Periode = """ & Periode & """
Der Sinn der Sache: Die Eingabe würde etwas vereinfacht.
Danke für eine Antwort.
Gruss, Peter
Public Function cw(RefZelle As Variant, _
Optional Periode As String = "_A", _
Optional Positiv As Boolean = True) As Variant
...

Bild

Betrifft: AW: UDF - Argument ohne " " übergeben möglich?
von: Daniel
Geschrieben am: 17.06.2008 23:27:19
Hi
Bereichsnamen stehen für Zellbereiche, wenn du den Bereichsnamen ohne Anführungzeichen an die Funktion übergeben willst, musst du den 2. Parameter als RANGE deklarieren.
Gruß, Daniel

Bild

Betrifft: AW: UDF - Argument ohne " " übergeben möglich?
von: Peter

Geschrieben am: 18.06.2008 07:19:28
Hallo Daniel
Optional Periode As Range = _A kann ich nicht definieren, da die Meldung erscheint "Fehler beim kompilieren - ungültiges Zeichen (_) - es geht also auch mit Range nur
Optional Periode As Range = "_A", (selbst Variant geht nicht).
Gibt es sonst ein Trick, dass ich den wirklich existierenden Bereichsnamen _A (und andere ähnliche) ohne Anführungszeichen (" ") übergeben kann?
Gruss, Peter

Bild

Betrifft: AW: UDF - Argument ohne " " übergeben möglich?
von: Beverly

Geschrieben am: 18.06.2008 09:21:11
Hi Peter,
versuchs mal einfach so

Public Function cw(RefZelle As Variant, _
Optional Periode, _
Optional Positiv As Boolean = True) As Variant




Bild

Betrifft: AW: UDF - Argument ohne " " übergeben möglich?
von: Peter

Geschrieben am: 18.06.2008 11:50:07
Hallo Karin
Vielen Dank. Das würde so wohl schon gehen, allerdings ist die Funktion so aufgebaut, dass die optionale Periode den Wert _A übernehmen muss, wenn nicht ein anderer übergeben wird.
Dafür kann ich ja abfragen, ob die Variable leer ist, und wenn ja weise ich ihr den Wert "_A" zu, wenn nein, erweitere ich die Variable vorne und hinten mit einen Anführungszeichen ("). Dazu muss ich wohl die Variable redimensieren sonst ist der Inhalt der Variable nicht "_A" sondern """ & _A & """.
Was muss ich zusätzlich vorkehren, dass ich dann schlussendlich wieder einen String habe und bei Nicht-Eingabe dieser "_A" ist?
Danke für eine Antwort.
Gruss, Peter
Option Explicit
Public Function cw(RefZelle As Variant, _
Optional Periode, _
Optional Positiv As Boolean = True) As Variant
If Periode = "" Then Periode = "_A" Else Periode = """ & periode & """

Bild

Betrifft: AW: UDF - Argument ohne " " übergeben möglich?
von: Beverly
Geschrieben am: 18.06.2008 12:27:00
Hi Peter,
ich weiß zwar nicht genau, was du damit bezweckst, aber versuche anstelle von If Periode = "" dieses: If IsMissing(Periode) Then



Bild

Betrifft: AW: UDF - Argument ohne " " übergeben möglich?
von: Peter

Geschrieben am: 18.06.2008 17:55:04
Hallo
Vielleicht sind wir der Lösung schon ziemlich nahe. Folgendes fehlt mir noch
Wie wandle ich die Variant-Variable mit dem Inhalt """ & _A & """ in einen String um, der "_A" enthält?
Mit Redim oder ähnlichem bin ich nicht bewandert.
Bin dankbar für eine Antwort.
Gruss, Peter

Bild

Betrifft: AW: UDF - Argument ohne " " übergeben möglich?
von: Hajo_Zi

Geschrieben am: 18.06.2008 21:30:54
Hallo Peter,

Option Explicit
Sub Peter()
Dim VaVariable As Variant
Dim StVariable As String
VaVariable = """ & _AB & """
MsgBox "," & VaVariable & ";" & Len(VaVariable)
StVariable = Mid(VaVariable, 5, Len(VaVariable) - 5 - 3)
MsgBox StVariable
End Sub



Bild

Betrifft: AW: UDF - Argument ohne " " übergeben möglich?
von: Peter
Geschrieben am: 19.06.2008 16:12:02
Hallo Hajo
Das ist für mich DIE Lösung. Vielen Dank.
Zu meinem Verständnis:
Könntest du mir erklären, was die Überegungen zu untenstehender Codezeile sind?
StVariable = Mid(VaVariable, 5, Len(VaVariable) - 5 - 3)
Vielen Dank! Peter

Bild

Betrifft: AW: UDF - Argument ohne " " übergeben möglich?
von: Hajo_Zi

Geschrieben am: 19.06.2008 16:17:56
Hallo Peter,
ich habe vermutet es geht nicht nur um _A sonder auch _ABD
Mid list ein Teil aus
5 ab 5 Stelle da steht das _
dann die Anzahl der Zeichen ergeben sich aus der Länge der Variablen minus Startpostion minus Zeichen dahinter -1
Gruß Hajo

Bild

Betrifft: AW: UDF - Argument ohne " " übergeben möglich?
von: Peter
Geschrieben am: 19.06.2008 18:21:09
Hallo Hajo
Vielen Dank für die Erklärung. Deine Vermutung war schon richtig - und ich habe beim Testen gestaunt, dass das klappt. Nochmals vielen Dank!
Peter

Bild

Betrifft: @ Hajo: UDF - Argument ohne " " übergeben möglich?
von: Peter

Geschrieben am: 20.06.2008 14:27:00
Hallo Hajo
Ich habe nun versucht, die gewonnen Einsichten im meine Funktion einzubauen. Da bin ich mit der Variant-Variable vaPeriode gescheitert und habe nun mit Hilfe der Codezeile vaPeriode = vaPeriode (wenn ich mit der Maus darüber fahre) festgestellt, dass wenn ich das zweite Argument wie gewünscht mit _A übergebe, die Variable nichts enthält; wenn ich das zweite Argument mit "_A" übergebe, wird dies der Variable auch so übergeben.
Mache ich noch einen Überlegungsfehler?
Danke für eine Antwort und freundlicher Gruss, Peter

Public Function cw(RefZelle As Variant, _
Optional vaPeriode As Variant, _     'Alternativ = Optional vaPeriode as  _
Variant = """ & _A & """
Optional Positiv As Boolean = True) As Variant
Application.Volatile
Dim sFormula As String, sReference As String
Dim Periode As String
vaPeriode = vaPeriode
If IsEmpty(vaPeriode) Then vaPeriode = """ & _A & """   'nur wenn der optionale Wert nicht  _
schon weiteroben übergeben wird
Periode = Mid(vaPeriode, 5, Len(vaPeriode) - 8)
End Function


=CW(I15;_A;1) 'Argument 2 wird irgendwie nicht übernommen
=CW(I15;"_A";1) 'Argument 2 wird übernommen

Bild

Betrifft: AW: UDF - Argument ohne " " übergeben möglich?
von: Daniel
Geschrieben am: 18.06.2008 22:58:59
HI
vielleicht so:
Optional Periode as Range = Range("_A")
Gruß, Daniel

 Bild
Excel-Beispiele zum Thema "UDF - Argument ohne " " übergeben möglic"
Die "personl"-Arbeitsmappe ausgeblendet speichern Datumsdifferenz in der Form "12 Jahre, 3 Monate, 4 Tage"
Wenn "fett", dann addieren Die ersten 5 Zeichen nach einem "+" separieren
Auf Doppelklick Zeilenumbruch und "X" Übernahme von Werten mit "x" in eine zweite Tabelle
Nur Zeilen mit einer "2" drucken Bei Eingabe von "j" "Ja" und von "n" "Nein" schreiben
Bei Zeileneintrag Anzeige von "erledigt" Bei Eingabe von "x" Zelle unterhalb in fett