2009-11-09 61 views
1

我的访问项目中有一个表单模块。在模块的顶部,我声明一个变量,像这样:访问表单模块中的变量的公共和私人修改器

option explicit 

private id_foo as long 

我想明确地指出,我通过使用它的private访问修饰符需要在我的窗体模块中的变量。

现在,同样的窗体模块中进一步下跌,我有需要知道和/或修改的id_foo值的函数:

function bar() as long 
    call do_something(me.id_foo) 
end function 

然而,这不起作用。但是,当我更改专用修改器修改器公像

public id_foo as long 

它的工作。

这种行为让我感到奇怪或者不直观,事实上,我无法看到public和private的含义,如果我必须将该变量声明为public,才能在同一个表单模块中使用它。

那么,我是否忽略了一些显而易见的东西,或者这是应该如何处理的?在id_foo前

感谢/刘若英

+0

它以什么方式不起作用?错误讯息?它是否编译,因为我看不到它可以与我在那里? – Fionnuala 2009-11-09 14:15:29

回答

0

一个表单及其模块实际上代表一个类对象。您还可以创建(实例化)该类对象的多个实例。

因此,您声明为public的任何变量都将成为该类对象的公共属性。请注意,声明为public的表单代码模块中的任何函数都会成为该类对象的公共方法。当你输入“我”时,所有这些属性和方法都会显示在intel的意义上。关键词。

如果将该变量声明为private,则该变量(或函数)将不会作为窗体的公共属性(变量)或公共方法(函数)公开。

因此,您的案例的简单解决方案是放弃在您的代码中使用me关键字,并且您的代码将运行得很好。

所以声明为公共或私人在这里有效果。事实上,“私人”是默认的。因此,公开会将变量和/或函数公开为作为类对象的那种形式的属性和方法(请注意,您可以同时加载同一表单的多个实例)。

如果您将事物解密为私有(默认,所以您不必为变量或函数做任何事情),那么您仍然可以在该表单代码模块中的任何代码例程中使用该值,但它不会作为财产/方法公开暴露,因此你不能使用我。

因此,如果您删除了我的使用,您的代码将正常工作。,只是去:

function bar() as long 
    call do_something(id_foo) 
end function 
+0

谢谢你的解释。因此,'me'与其他语言中的'self'或'this'不完全相同。 – 2009-11-09 21:22:32

2

尝试没有“我”:

function bar() as long 
    call do_something(id_foo) 
end function 
1

如果您使用我的关键字,你只能看到公共成员,属性(也构成和VBA )。

+0

好答案。并不总是完美的,但intellisense不会显示Me.id_foo,除非它是公开的。 – JeffO 2009-11-09 15:20:55

+0

这是类模块的标准行为。一个可能不会意识到它,直到使用独立的类模块,但ME引用CLASS MODULE,而不是它附加的表单/报告。 – 2009-11-09 21:06:45