2015-03-31 60 views
-1

我想用VBA来控制光学仪器。起初,我写这个工作簿上的所有对象&变体,模块1上的控制功能,用户表单1上的UI控制。公共对象如下所示。但我发现objca无法正常工作。所以我想这可能是在这本书,module1,userform1之间交付对象的问题。Excel VBA执行仪器控制错误

Public objCa200 As Ca200 
Public objca As Ca 
Public objprobe As probe 
Public objmemory As Memoryter 

尝试多次后,它通常可以用在模块1声明的对象,在模块1控制功能,UserForm1上UI控制工作。 但我仍然不明白为什么?如果在本工作簿上声明公共对象,任何用户窗体或模块都可以调用对象?

+0

你可以通过模块名前面加上变量/函数调用模块函数和变量:部分向下滚动到“宏/ Sub过程的放置在适当的模块”。例如:'Module1.Ca200' http://www.mrexcel.com/forum/excel-questions/425695-global-vs-public-variable.html – user1274820 2015-03-31 15:23:39

+0

我认为VB(或VB.NET)会更好这个比VBA选项。 VBA适合与MS Office产品一起使用,并且您可能需要做的一些事情在VBA中可能会更加困难 – FreeMan 2015-03-31 15:27:42

回答

0

虽然它并不完全明显,但Excel对象部分应该通常用于Excel事件,而不是用于一般子例程和函数。这包括“ThisWorkbook”对象;即针对整个工作簿(又名Excel文件)触发的Excel事件。

可以将常规函数和子例程放入一个Excel Objects对象中,但您必须将调用作为该函数或子对象的名称的前缀。 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