Excel VBA:我应该使用类模块吗?
Heylo,我一直在努力使我的代码更干净、更好、更高效。我也一直希望它更易于使用和维护。我有在C/C++中进行面向对象编程的经验,但我一直避免使用Excel VBA。我已经读了很多关于VBA中的类模块的书,但我无法确定它们是否适合我的情况Excel VBA:我应该使用类模块吗?,vba,excel,class,module,Vba,Excel,Class,Module,Heylo,我一直在努力使我的代码更干净、更好、更高效。我也一直希望它更易于使用和维护。我有在C/C++中进行面向对象编程的经验,但我一直避免使用Excel VBA。我已经读了很多关于VBA中的类模块的书,但我无法确定它们是否适合我的情况 我有一个自定义Excel加载项,它有一个普通模块。这个模块(一般称为“Module1”)包含大约18个子例程,它们都做完全不同的事情。每个子例程都连接到自定义选项卡中的自定义按钮,使用每个子例程中的ByVal控件作为IRibbonControl参数,以及一些功
我有一个自定义Excel加载项,它有一个普通模块。这个模块(一般称为“Module1”)包含大约18个子例程,它们都做完全不同的事情。每个子例程都连接到自定义选项卡中的自定义按钮,使用每个子例程中的
ByVal控件作为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
像这个例子一样,我所有的子程序本质上都是不同的。我的子例程不共享变量或属性(因此图标车类不适用),一个子例程也不执行其他几个子例程
将我当前的普通模块重新格式化为新的类模块+普通模块(作为驱动程序)对我的情况有好处吗
提前感谢您的任何意见。根据您提供的代码,使用类模块是没有意义的 类模块用于定义自定义对象
Chip Pearson的网站在这个主题上有很好的内容:根据您提供的代码,使用类模块是没有意义的 类模块用于定义自定义对象
Chip Pearson的网站在这一主题上有很好的内容:“18个子例程,它们都做完全不同的事情”似乎并不是一组令人信服的代码来创建一个类。在这里,你可能从一个类中得到的只是增加的复杂性。“18个子例程,它们都做完全不同的事情”似乎并不是一组令人信服的代码来创建一个类。很可能你从一个类中得到的只是增加了复杂性。