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的模块.它们具有构造函数,析构函数,并且可以实例化以提供类对象.
我至少知道它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