2012-12-11 13 views
9

mia comprensione di utilizzare la proprietà Let in un modulo di classe finora è che lo si imposta nei moduli di classe come questo:Lasciare la proprietà dei moduli di classe VBA - è possibile avere più argomenti?

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

E poi, dopo aver creato un oggetto di questa classe è possibile impostare questa proprietà in questo modo:

MyObject.Name = "Larry" 



domanda: E 'possibile entrare in qualche modo più argomenti in una proprietà di classe? Per esempio:

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

Come procedere quindi a impostare questa proprietà al di fuori della classe?

MyObject.Name = ?? 

Oppure è semplicemente impossibile farlo?

+1

Una singola proprietà non può avere due parametri ters, anche se potresti usare un array. In un caso come questo è probabilmente meglio usare un Sub regolare come 'SetName (first, last)' –

+0

Grazie. Sei sicuro che sia possibile farlo con un array? Continuo a ricevere l'errore "Impossibile assegnare all'array" quando lo provo. – mattboy

+0

@mattboy - ho aggiunto alla mia risposta per mostrarvi come è possibile restituire o un oggetto più complesso con i dati richiesti. – InContext

risposta

7

Come per il tuo commento se preferisci incapsulare questa logica, puoi usare qualcosa di simile al seguente.

Di seguito sono inclusi il sottotitolo e la funzione. La funzione restituisce un oggetto Person:

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 

Persona Classe:

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

Grazie, ma speravo in un modo per impostare tutto in una riga durante la creazione dell'oggetto invece di avere una riga per nome, una per ultima nome e altre righe per qualsiasi altra cosa possa essere necessaria. Ma suppongo che tu abbia semplicemente bisogno di creare un Sub invece di una Proprietà per farlo. – mattboy

+0

vedi la mia modifica. Penso che sia un uso migliore per chiamare una funzione che restituisce la classe Person piuttosto che una sub. Hai intellisenza sui campi e la sua forte tipizzazione. – InContext

1

Usa come routine Sub pubblica all'interno della classe per eseguire questa:

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

End Sub 

Persona Classe:

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