9

如果在“Sheet”(“Sheet1”、“Sheet2”等)、“ThisWorkbook”和“Modules”(“Module1”等)中运行 VBA 代码会有什么不同?

换句话说,在哪些情况下应该使用哪一个?

在此处输入图像描述

4

2 回答 2

12

模块是类似功能和子例程的集合,通常根据其功能进行分组。

在模块子例程/函数中, Private : Functions 和 Sub-routines 仅在该模块中可用。 Public:可以从任何地方直接访问它们。(另一个模块,不同的宏等)将实用程序功能存储在模块中是常见的做法。

Option Private Module,这使得模块本身私有,可以添加到任何标准模块的顶部,但不允许在对象模块上,如 ThisWorkbook 或 Sheet1 等。


ThisWorkbook 是 Workbook 对象的私有模块。例如,Workbook_Open()Workbook_Close()例程驻留在此模块中。(工作簿对象参考


同样,Sheet1、Sheet2 是各个工作表的私有模块。在它们中,您将放入特定于该工作表的功能。 Worksheet_ActivateWorksheet_DeactivateWorkbook_SheetChange是提供给您的默认事件,以便您可以在各自的私有工作模块中处理它们。(工作表对象参考

正如@Daniel Cook 在评论中所说,虽然 ThisWorkbook 和 WorkSheet 的模块不能直接用作模块subName()functionName()模块外,但仍然可以使用ThisWorkbook.subName()或调用它们ThisWorkbook.functionName()


类模块是您可以在 VBA 中获得的最接近 OOP 的模块。它们具有构造函数、析构函数,并且可以实例化以提供类对象。

于 2012-10-18T13:21:11.620 回答
0

我知道至少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

于 2012-10-18T13:19:43.823 回答