2011-07-10 11 views
10

Używam vba z programem Excel 2007 i piszę kod dla modułu klasy.Jak działają opcjonalne parametry w oknie Let/Get Properties?

1) jest następujący kod w ogóle możliwe? ...
Zasadniczo mam dwa teksty stałe, zadzwoń do nich eDATASET i eDATATSUBSET. Określona wartość z eDATASET powinna wywołać przypisanie z opcjonalnie przekazanego parametru we właściwości Let. Coś takiego:

Public Property Let foo(Optional ByVal lngSubSet as eDATASUBSET, _ 
         ByVal lngSuperSet as eDATASET) 
    Select Case lngSuperSet 
     Case eDATASET.abc, eDATASET.def 
      mlngBar = lngSuperSet 
     Case eDATASET.xyz 
      '// if lngSubSet not passed, trigger error code... 
      mlngBar = lngSubSet 
    End Select 
End Property 

2) W jaki sposób mogę nawet przekazać opcjonalny parametr do własności zapisywalny podczas wywoływania obiekt ...
Oprócz pozornie wstecznej umieszczenia parametrów Optional (w porównaniu z opcjonalnym parametry w funkcjach i subsach), nie mogę znaleźć żadnej dokumentacji dotyczącej tej funkcji. Pomoc vba mówi:

Opcjonalne. Wskazuje, że argument nie jest wymagany. Jeśli jest używany, wszystkie kolejne argumenty w arglist muszą być opcjonalne i zadeklarowane za pomocą słowa kluczowego Opcjonalnie. Należy zauważyć, że nie jest możliwe, aby prawa strona wyrażenia Właściwość Niech była opcjonalna.

i następujące po vbusers.com. Nie wyjaśniają zbyt wiele w sposobie użytkowania. Więc w jaki sposób mogę przekazać opcjonalny parametr przy wywołaniu obiektu z modułem kod ... oObj.foo = ???

3) Czy istnieje lepszy sposób to zrobić? ...
mam podstawową wiedzę OOP (przynajmniej w jaki sposób jest implementowany w vba). Czy istnieje lepszy sposób warunkowego zaakceptowania parametru w obiekcie?

+0

możliwy duplikat [Pozwolić na własności modułów klasy VBA - czy możliwe jest posiadanie wielu argumentów?] (Http: // stackoverflow.com/questions/13823367/let-property-of-vba-class-modules-is-it-possible-to-have-multiple-arguments) –

Odpowiedz

10

1) Tak Twój kod jest możliwy.

2) W ten sposób można przekazać argument:

Zakładając myObject to obiekt klasy:

myObject.foo(lngSubSet) = lngSuperSet 

Umieszczenie argumentów w arglist rzeczywiście wyglądać dziwnie, ale to jest VBA dla ciebie. Powiedzmy, że masz 4 argumenty, z których dwa są opcjonalne plus twoja prawa strona. Można by umieścić je tak:

Public Property Let foo(arg1, arg2, Optional arg3, Optional arg4, _ 
         RHS) 

i wykorzystać je w ten sposób (przy założeniu, że rezygnacja z arg4):

myObject.foo(arg1,arg2,arg3) = RHS 

3) Czy istnieje lepszy sposób to zrobić? Zawsze jest, w zależności od tego, kogo zapytasz. Możesz mieć swój argument lngSubSet jako osobną własność całkowicie. Tak to robię. Ale w twoim przypadku twój sposób robienia rzeczy może ci się udać. Nie wiem, to w dużej mierze kwestia gustu i zależy od konkretnego zastosowania.

+0

jeśli zastanawiasz się nad +++ [tutaj] (http: // stackoverflow.com/questions/13823367/let-property-of-vba-class-modules-is-it-possible-to-have-multiple-arguments/26488170#26488170) i ​​[tutaj] (http: //chat.stackexchange .com/pokoje/14929/vba) –

+1

Ha! Tak, naprawdę się zastanawiałem, co się dzieje na Ziemi. –

Powiązane problemy