Привет, я всегда стараюсь сделать мой код чище, лучше и эффективнее.Я также всегда стараюсь сделать его более легким в использовании и более легким в обслуживании.У меня есть опыт работы с объектно-ориентированным программированием на C / C ++, но я избегал этого в Excel VBA.Я много читал о модулях классов в VBA, но я не могу определить, стоят ли они для моей ситуации.
У меня есть пользовательская надстройка Excel с обычным модулем.Этот модуль (обычно называемый «Module1») содержит около 18 подпрограмм, которые делают совершенно разные вещи.Каждая из этих подпрограмм связана с настраиваемой кнопкой на настраиваемой вкладке с использованием аргумента ByVal control As IRibbonControl
в каждой подпрограмме и некоторого Ribbon XML для управления макетом и функцией.
В любом случае, в качестве примера я написалто, что я считаю модулем класса и обычными модулями, выглядело бы в моем случае, если бы я реализовал их:
' Class Module: TestClass
Private sumVal As Double
Private wsNames As String
Public Sub Add(myRange as Range)
For Each myCell In myRange
sumVal = sumVal + myCell.Value
Next myCell
MsgBox "The sum of your range is: " & sumVal
End Sub
Public Sub ChangeSettings()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
MsgBox "The settings have been changed!"
End Sub
Public Sub PrintHello()
MsgBox "Hellurrr!"
End Sub
Public Sub PrintSheetNames()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Sheets
wsNames = wsNames + ws.Name + ", "
Next ws
MsgBox "The names of all sheets in this workbook are: " & wsNames
End Sub
' Normal Module: Module1
Sub RunAdd(ByVal control As IRibbonControl)
Dim ClsObj As New TestClass
Dim theRange As Range
Set theRange = Selection
ClsObj.Add theRange
End Sub
Sub RunChangeSettings(ByVal control As IRibbonControl)
Dim ClsObj As New TestClass
ClsObj.ChangeSettings
End Sub
Sub RunPrintHello(ByVal control As IRibbonControl)
Dim ClsObj As New TestClass
ClsObj.PrintHello
End Sub
Sub RunPrintSheetNames(ByVal control As IRibbonControl)
Dim ClsObj As New TestClass
ClsObj.PrintSheetNames
End Sub
Как и в этом примере, все мои подпрограммы по своей сути различны.Мои подпрограммы не разделяют переменные или свойства (поэтому культовый класс Car не применим), и при этом одна подпрограмма не выполняет несколько других подпрограмм.
Переформатирует мой текущий Нормальный Модуль в новый Модуль Класса + Нормальный Модуль (какводитель) быть полезным для моей ситуации вообще?
Спасибо за любой ваш вклад заранее.