如果在“工作表”,“本工作簿”和“模块”中运行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_Activate , Worksheet_Deactivate , Workbook_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