如果在"Sheets","ThisWorkbook"和"Modules"中运行VBA代码,会有什么不同?

Meh*_*lar 8 excel vba spreadsheet excel-vba

如果在"表格"("Sheet1","Sheet2"等),"ThisWorkbook"和"Modules"("Module1"等)中运行VBA代码,会有什么不同?

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

在此输入图像描述

Ani*_*han 11

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

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

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


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


类似地,Sheet1,Sheet2是各个工作表的私有模块.在它们中,您将放入特定于该表的函数. Worksheet_Activate,Worksheet_Deactivate,Workbook_SheetChange是提供给您的默认事件,以便您可以在相应的私有工作模块中处理它们.(工作表对象参考)

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


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


Mik*_*ogg 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
Run Code Online (Sandbox Code Playgroud)

这个问题也已经在这里得到回答:

http://www.pcreview.co.uk/forums/macro-module-function-sub-and-workbook-and-sheets-t980275.html