如果在“Sheets”(“Sheet1”,“Sheet2”等),“ThisWorkbook”和“Modules”(“Module1”等)中运行VBA代码,会有什么区别?

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

最佳答案

模块是相似功能和子例程的集合,通常按其功能分组。

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

可以将模块本身变为私有(private)的Option Private Module可以添加到任何标准模块的顶部,但是不允许在对象模块(例如ThisWorkbook或Sheet1等)上使用。

ThisWorkbook是Workbook对象的专用模块。
例如, Workbook_Open()例程, Workbook_Close()例程位于此模块中。 (Workbook Object Reference)

同样,Sheet1,Sheet2是各个工作表的专用模块。在其中,您需要输入特定于该工作表的函数。
Worksheet_Activate Worksheet_Deactivate Workbook_SheetChange 是提供给您的默认事件,以便您可以在各自的专用工作表模块中进行处理。 ( Worksheet Object Reference )

正如@Daniel Cook在评论中所说,虽然ThisWorkbook和WorkSheet的模块无法直接用作模块外部的subName()functionName(),但仍可以使用ThisWorkbook.subName()ThisWorkbook.functionName()对其进行调用

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

10-05 18:49