2012-12-11 16 views
9

Moje rozumienie pomocą właściwości wpuścić module klasy tak daleko, że go skonfigurować w modułach klasy takich jak ta:Dopuszczaj własności modułów klasy VBA - czy można mieć wiele argumentów?

Dim pName as String 
Public Property Let Name(Value As String) 
    pName = Value 
End Property 

a następnie po utworzeniu obiektu tej klasy możesz ustawić tę właściwość tak:

MyObject.Name = "Larry" 



pytanie: Czy to możliwe, aby w jakiś sposób wprowadzić wiele argumentów do właściwości klasy? Na przykład:

Dim pFirstName as String, pLastName as String 
Public Property Let Name(FirstName As String, LastName As String) 
    pFirstName = FirstName 
    pLastName = LastName 
End Property 

Jak byś zmienił ustawienie tej nieruchomości poza klasą?

MyObject.Name = ?? 

A może to po prostu niemożliwe?

+1

Jedna właściwość nie może mieć dwóch elementów ale możesz użyć tablicy. W takim przypadku prawdopodobnie lepiej jest użyć zwykłego Sub, takiego jak 'SetName (first, last)' –

+0

Dzięki. Czy na pewno można to zrobić za pomocą tablicy? Ciągle otrzymuję komunikat "Nie mogę przypisać do tablicy", gdy próbuję tego. – mattboy

+0

@mattboy - dodałem do mojej odpowiedzi, aby pokazać, jak możesz zwrócić lub bardziej złożony obiekt z wymaganymi danymi. – InContext

Odpowiedz

7

Zgodnie z komentarzem, jeśli wolisz hermetyzować tę logikę, możesz użyć czegoś podobnego do poniższego.

Poniżej znajduje się sub i funkcja. Funkcja zwraca obiekt osobę:

Public Sub testing() 

    Dim t As Person 

    Set t = PersonData("John", "Smith") 

End Sub 


Public Function PersonData(firstName As String, lastName As String) As Person 

    Dim p As New Person 

    p.firstName = firstName 
    p.lastName = lastName 

    Set PersonData = p 

End Function 

Osoba Zajęcia:

Dim pFirstName As String, pLastName As String 

Public Property Let FirstName(FirstName As String) 
    pFirstName = FirstName 
End Property 

Public Property Get FirstName() As String 
    FirstName = pFirstName 
End Property 

Public Property Let LastName(LastName As String) 
    pLastName = LastName 
End Property 

Public Property Get LastName() As String 
    LastName = pLastName 
End Property 
+1

Dzięki, ale miałem nadzieję na sposób ustawienia wszystkiego w jednym wierszu podczas tworzenia obiektu zamiast jednego wiersza imienia, jednego na końcu nazwa i inne wiersze, które mogą być potrzebne. Ale myślę, że po prostu wystarczy utworzyć Sub, a nie właściwość, aby to zrobić. – mattboy

+0

zobacz moją edycję. Myślę, że lepiej użyć funkcji, która zwraca klasę Person, a nie sub. Masz intellisense nad polami i jest mocno wpisany. – InContext

1

Użyj jako procedury Public Sub obrębie klasy do wykonania tej:

Public Sub testing() 
Dim myPerson As New Person 
myPerson.SetName "KaciRee", "Software" 

End Sub 

klasa Osoba:

Dim pFirstName As String, pLastName As String 

Public Property Let FirstName(FirstName As String) 
    pFirstName = FirstName 
End Property 

Public Property Get FirstName() As String 
    FirstName = pFirstName 
End Property 

Public Property Let LastName(LastName As String) 
    pLastName = LastName 
End Property 

Public Property Get LastName() As String 
    LastName = pLastName 
End Property 

Public Sub SetName(FirstName As String, LastName As String) 
pFirstName = FirstName 
pLastName = LastName 
End Sub 
Powiązane problemy