Excel VBA: я должен использовать модуль класса? - PullRequest
0 голосов
/ 13 сентября 2018

Привет, я всегда стараюсь сделать мой код чище, лучше и эффективнее.Я также всегда стараюсь сделать его более легким в использовании и более легким в обслуживании.У меня есть опыт работы с объектно-ориентированным программированием на 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 не применим), и при этом одна подпрограмма не выполняет несколько других подпрограмм.

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

Спасибо за любой ваш вклад заранее.

1 Ответ

0 голосов
/ 13 сентября 2018

На основании предоставленного вами кода не имеет смысла использовать модуль класса.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...