我想用VBA来控制光学仪器。起初我写了所有的对象&本工作簿中的变体,module1上的控制功能,userform1上的UI控件。公共对象如下所示。但我发现objca无法正常工作。所以我想这可能是在这个工作簿,module1,userform1之间传递对象的问题。
Public objCa200 As Ca200
Public objca As Ca
Public objprobe As probe
Public objmemory As Memoryter
经过多次尝试,它可以正常使用module1上的声明对象,module1上的控制功能,userform1上的UI控件。 但我还是不明白为什么???如果在这个工作簿上声明了公共对象,那么任何用户表单或模块都可以调用对象吗?
答案 0 :(得分:0)
虽然不是很明显,但 Excel对象部分通常用于Excel事件,而不是一般子例程和函数。那包括“ThisWorkbook”对象;适用于为整个工作簿(即Excel文件)触发的Excel事件。
您可以将常规函数和子例程放入Excel对象中,但您必须使用对象名称(例如,对象名称)对该函数或子函数进行前缀调用。 Sheet1.functionInSheet1(...)]。但是,将多个工作表需要使用的子程序或函数放入其中一个命名工作表中是没有意义的。这会让你以后混淆,或者需要使用或改编你的Excel文件的其他人。
模块是通常所有工作人员功能和子程序的所在部分。这包括可以由单元格公式调用的函数,并包括可由UI控件调用的子例程。 Excel文件中的所有工作表和图表都可以访问这些函数和子例程。假设您只定义了一个模块,并且没有子例程/函数的重复名称,则不必为这些子/函数的任何调用添加前缀。
此范围界定独立于公共/私人指定人员。
关于范围界定的详细说明见下面的链接。向下滚动到“在适当的模块中放置宏/子程序”部分: http://www.globaliconnect.com/excel/index.php?option=com_content&view=article&id=162:excel-vba-calling-sub-procedures-a-functions-placement-in-modules&catid=79&Itemid=475