Excel vba: следует ли использовать модуль класса?

Привет, я всегда стараюсь сделать свой код чище, лучше и эффективнее. Я также всегда стараюсь сделать его более простым в использовании и более удобным в обслуживании. У меня есть опыт объектно-ориентированного программирования на C / C++, но я избегал этого с помощью Excel VBA. Я много читал о модулях классов в VBA, но не могу определить, подходят ли они для моей ситуации.

У меня есть настраиваемая надстройка Excel с обычным модулем. Этот модуль (общее название «Module1») содержит около 18 подпрограмм, которые делают совершенно разные вещи. Каждая из этих подпрограмм связана с настраиваемой кнопкой на настраиваемой вкладке с помощью аргумента ByVal control As IRibbonControl в каждой подпрограмме и некоторого 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 неприменим), и при этом одна подпрограмма не выполняет несколько других подпрограмм.

Будет ли переформатирование моего текущего нормального модуля в новый модуль класса + нормальный модуль (в качестве драйвера) вообще полезно для моей ситуации?

Заранее благодарим вас за ваш вклад.

«18 подпрограмм, которые делают совершенно разные вещи» кажется не лучшим набором кода для создания класса. Скорее всего, все, что вы получите от занятий здесь, - это добавленная сложность.

Tim Williams 13.09.2018 21:46
0
1
1 474
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Судя по предоставленному вами коду, на самом деле нет смысла использовать модуль класса.

Модули классов используются для определения настраиваемых объектов.

На сайте Чипа Пирсона есть хороший контент по этой теме: http://www.cpearson.com/excel/classes.aspx

Другие вопросы по теме