如果在“工作表”,“本工作簿”和“模块”中运行VBA代码,它们会有什么不同?

如果在“工作表”(“Sheet1”,“Sheet2”等),“ThisWorkbook”和“Modules”(“Module1”等)中运行VBA代码有什么不同?

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

在这里输入图像说明

一个模块是一组类似的函数和子例程,通常根据其function进行分组。

在模块子程序/函数中, 私有 :函数和子例程仅在该模块中可用。 公开 :他们可以从任何地方直接访问。 (另一个模块,不同的macros等)通常的做法是将实用function存储在模块中。

可以将模块本身专用的Option Private Module添加到任何标准模块的顶部,但是不允许在ThisWorkbook或Sheet1等对象模块上使用。


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


同样,Sheet1,Sheet2是单个工作表的专用模块。 在他们中,你会放入特定的function表。 Worksheet_ActivateWorksheet_DeactivateWorkbook_SheetChange是提供给您的默认事件,以便您可以在相应的专用工作模块中处理它们。 ( 工作表对象参考

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


在VBA中,类模块是最接近OOP的类模块。 他们有构造函数,析构函数,可以实例化给你类对象。

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