Cela dépend de qui va développer et maintenir le code. Typique "Power User" macro écrivains piratage petites ad-hoc applications peuvent ainsi être confondu à l'aide de classes. Mais grave pour le développement, les raisons pour utiliser les classes sont les mêmes que dans d'autres langues. Vous avez les mêmes restrictions que VB6 - pas d'héritage - mais vous pouvez avoir du polymorphisme par l'utilisation d'interfaces.
Une bonne utilisation de classes pour représenter des entités et des collections d'entités. Par exemple, je vois souvent des code VBA qui copie une plage Excel dans un tableau à deux dimensions, puis manipule le tableau à deux dimensions avec un code comme:
Total = 0
For i = 0 To NumRows-1
Total = Total + (OrderArray(i,1) * OrderArray(i,3))
Next i
C'est plus lisible pour copier la plage dans une collection d'objets de façon appropriée les propriétés nommées, quelque chose comme:
Total = 0
For Each objOrder in colOrders
Total = Total + objOrder.Quantity * objOrder.Price
Next i
Un autre exemple est l'utilisation de classes pour mettre en œuvre le RAII modèle de conception (google pour elle). Par exemple, une chose que j'ai peut-être besoin de faire est d'ôter la protection d'une feuille de calcul, quelques manipulations, puis la protéger de nouveau. À l'aide d'une classe assure que la feuille de calcul sera toujours protégée à nouveau, même si une erreur se produit dans votre code:
--- WorksheetProtector class module ---
Private m_objWorksheet As Worksheet
Private m_sPassword As String
Public Sub Unprotect(Worksheet As Worksheet, Password As String)
' Nothing to do if we didn't define a password for the worksheet
If Len(Password) = 0 Then Exit Sub
' If the worksheet is already unprotected, nothing to do
If Not Worksheet.ProtectContents Then Exit Sub
' Unprotect the worksheet
Worksheet.Unprotect Password
' Remember the worksheet and password so we can protect again
Set m_objWorksheet = Worksheet
m_sPassword = Password
End Sub
Public Sub Protect()
' Protects the worksheet with the same password used to unprotect it
If m_objWorksheet Is Nothing Then Exit Sub
If Len(m_sPassword) = 0 Then Exit Sub
' If the worksheet is already protected, nothing to do
If m_objWorksheet.ProtectContents Then Exit Sub
m_objWorksheet.Protect m_sPassword
Set m_objWorksheet = Nothing
m_sPassword = ""
End Sub
Private Sub Class_Terminate()
' Reprotect the worksheet when this object goes out of scope
On Error Resume Next
Protect
End Sub
Vous pouvez ensuite l'utiliser pour simplifier votre code:
Public Sub DoSomething()
Dim objWorksheetProtector as WorksheetProtector
Set objWorksheetProtector = New WorksheetProtector
objWorksheetProtector.Unprotect myWorksheet, myPassword
... manipulate myWorksheet - may raise an error
End Sub
Lorsque ce Sous-sorties, objWorksheetProtector est hors de portée, et de la feuille de calcul est protégée à nouveau.