2 votes

Distinguer les membres d'une classe des arguments portant le même nom en VBA ?

Existe-t-il un moyen de distinguer les membres d'une classe des arguments d'une propriété/sous-fonction portant le même nom en VBA ? Par exemple :

Classe 1 :

Private Name As String

Property Let LastName(Name As String)
   this.Name = Name
End Property

Property Get LastName() As String
    Dim Name As String
    Name = "Mr. "
    LastName = Name & this.Name
End Property

Dans d'autres langues, vous pouvez utiliser le mot clé this pour faire référence à un membre de classe/instance( ?). Mais comment cela est-il résolu en VBA ? Je sais que vous pouvez utiliser des noms différents. Mais ce n'est pas ce que je veux.

Merci pour votre aide !

1voto

FFFffff Points 348

En VBA, mot clé à utiliser à la place de this. es Me. Cependant, cela génère une erreur de compilation si la variable référencée dans la classe est privée (je ne sais pas pourquoi). Une solution de contournement possible est de la changer en public.

''''  Class1
Private PrName As String
Public PbName As String

Property Let LastName(Name As String)
   Me.PrName = Name ' throws a compile error
   Me.PbName = Name ' OK
End Property

UPDATE : Vous pouvez également créer une couche supplémentaire de fonctions / propriétés enveloppantes. set_name y getName . Le site Name Il n'est pas nécessaire de renommer la variable ou de changer sa portée. De plus, les paramètres d'entrée des propriétés d'origine restent intacts.

Private Name As String

Property Let LastName(Name As String)
   Call set_name(Name) ' throws a compile error
End Property

Private Sub set_name(new_name As String)
    ' wrapper
    Name = new_name
End Sub

Property Get getName() As String
    ' wrapper
    getName = Name
End Property

Property Get LastName() As String
    Dim Name As String
    Name = "Mr. "
    LastName = Name & Me.getName
End Property

1voto

ComputerVersteher Points 1796

Vous pouvez créer un This avec un Type comme Mathieu nous l'enseigne dans privé-comme-quelque-chose

Il suffit de créer un type avec les variables et de l'affecter à This.

Private Type TPerson
  Name As String
End Type

Private This As TPerson
Property Let LastName(Name As String)
   This.Name = Name
End Property

Property Get LastName() As String
    Dim Name As String
    Name = "Mr. "
    LastName = Name & This.Name
End Property

N'oubliez pas de lire les autres articles de RubberDuckVBA car ils fournissent de nombreuses informations sur VBA-OOP.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X