如果在“Sheet”(“Sheet1”、“Sheet2”等)、“ThisWorkbook”和“Modules”(“Module1”等)中运行 VBA 代码会有什么不同?
换句话说,在哪些情况下应该使用哪一个?
如果在“Sheet”(“Sheet1”、“Sheet2”等)、“ThisWorkbook”和“Modules”(“Module1”等)中运行 VBA 代码会有什么不同?
换句话说,在哪些情况下应该使用哪一个?
模块是类似功能和子例程的集合,通常根据其功能进行分组。
在模块子例程/函数中, Private : Functions 和 Sub-routines 仅在该模块中可用。 Public:可以从任何地方直接访问它们。(另一个模块,不同的宏等)将实用程序功能存储在模块中是常见的做法。
Option Private Module
,这使得模块本身私有,可以添加到任何标准模块的顶部,但不允许在对象模块上,如 ThisWorkbook 或 Sheet1 等。
ThisWorkbook 是 Workbook 对象的私有模块。例如,Workbook_Open()、Workbook_Close()例程驻留在此模块中。(工作簿对象参考)
同样,Sheet1、Sheet2 是各个工作表的私有模块。在它们中,您将放入特定于该工作表的功能。 Worksheet_Activate、Worksheet_Deactivate、Workbook_SheetChange是提供给您的默认事件,以便您可以在各自的私有工作表模块中处理它们。(工作表对象参考)
正如@Daniel Cook 在评论中所说,虽然 ThisWorkbook 和 WorkSheet 的模块不能直接用作模块subName()
或functionName()
模块外,但仍然可以使用ThisWorkbook.subName()
或调用它们ThisWorkbook.functionName()
类模块是您可以在 VBA 中获得的最接近 OOP 的模块。它们具有构造函数、析构函数,并且可以实例化以提供类对象。
我知道至少Modules
必须运行并ThisWorkBook
用于事件等SheetChange
事件。
常见代码吐出ThisWorkBook
:
Private Sub Workbook_Open()
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
End Sub
这个问题也已经在这里回答了:
http://www.pcreview.co.uk/forums/macro-module-function-sub-and-workbook-and-sheets-t980275.html