3 votes

VBA - Propriété de classe dont le nom est un mot clé réservé

Dans VBA, existe-t-il un mécanisme connu permettant de tromper le compilateur pour qu'il autorise l'utilisation de mots-clés réservés comme noms de propriétés de classe ? Par exemple, je voudrais créer une propriété appelée Select dans un de mes modules de cours. Cependant, le compilateur signale ma déclaration comme une erreur. Voici la syntaxe que j'ai utilisée :

Public Property Get Select() As Database.SQLStatements

End Property

Database est le nom de mon projet VBA et SQLStatements est l'un des modules de classe que j'ai créés. De plus, j'exécute le code dans MS Access 2010.

8voto

cyboashu Points 360

Vous pouvez faire cela et utiliser n'importe quel mot-clé/mot réservé dans votre VBA. Mais cela rendra votre code beaucoup plus désordonné et très difficile à lire/déboguer/maintenir.

Si vous avez une propriété bool nommée If dans votre classe, vous obtiendrez quelque chose comme ceci If .If  Then Eh bien, bonne chance pour lire ça. De même, la maintenance du code comme Find/Replace/rename etc. nécessitera une attention particulière et plus de travail.


Quoi qu'il en soit, si vous êtes prêt à endurer toute cette souffrance, voici comment vous devez procéder. Après les mots-clés/mots réservés, ajoutez un espace vide invisible en utilisant ALT+0160. et c'est tout. VBA considérera qu'il s'agit d'un nom parfaitement légal, par exemple If  .

De plus, vous devrez soit utiliser intellisense pour utiliser ces noms de propriétés, soit taper manuellement l'altcode partout. C'est de la saisie supplémentaire.


clsTest

Option Explicit

Private m_sSelect   As String
Private m_bIF       As Boolean

Public Property Get Select () As String '~~> Select () is actually typed as SelectALT+0160()
    Select  = m_sSelect
End Property

Public Property Let Select (ByVal sNewValue As String)
    m_sSelect = sNewValue
End Property

Public Property Get If () As Boolean
    If  = m_bIF
End Property

Public Property Let If (ByVal bNewValue As Boolean)
    m_bIF = bNewValue
End Property

Module de test

Option Explicit

Sub demo()

    Dim objTestClass As clsTest

    Set objTestClass = New clsTest

    With objTestClass
        .Select  = "It works. But it will, for sure, create readibility/maintenance issues."
        .If  = False
    End With

    MsgBox objTestClass.Select 

    '/ See how hard it will to read/debug this sort of code

     With objTestClass
        If .If  Then '~~> This line here  :)
            MsgBox "If prop value is TRUE"
        Else
            MsgBox "If prop value is FALSE"
        End If
     End With

End Sub

ALT+0160 <> Espace

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