Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 私有模块中的智能感知_Vba_Intellisense - Fatal编程技术网

Vba 私有模块中的智能感知

Vba 私有模块中的智能感知,vba,intellisense,Vba,Intellisense,假设我有一个名为Module1的模块,其代码如下: Private Sub MyPrivateSub() 'do something End Sub Public Sub MyPublicSub() 'do something End Sub Public Sub test() End Sub 如果我将光标放在Test()中,然后开始键入“MyPrivateSub”或“MyPublicSub”,我将无法获得任何智能感知。我可以键入“Module1.”(或“Me.”如果Mo

假设我有一个名为
Module1
的模块,其代码如下:

Private Sub MyPrivateSub()
    'do something
End Sub

Public Sub MyPublicSub()
    'do something
End Sub

Public Sub test()

End Sub
如果我将光标放在
Test()
中,然后开始键入“MyPrivateSub”或“MyPublicSub”,我将无法获得任何智能感知。我可以键入“Module1.”(或“Me.”如果
Module1
是类模块),以获得intellisense菜单,但这只包含公共方法
MyPublicSub
,如下所示:


是否有办法为所有会员(公共和私人)提供intellisense菜单?我正在处理一个包含许多方法的模块的项目,不断地上下复制/粘贴成员名称非常耗时。

如果您从fresh开始,可以执行以下操作: 对于您的所有私有子功能,请将其命名为标准格式,但目前将其命名为公共功能,例如:

公共子IAMU私有计算日期()
Public sub iamprivate_getsetfunction()


完成宏后,只需在编辑器中查找所有“Public sub-iamprivate”并将其替换为“Private sub”。

如果从fresh开始,可以执行以下操作: 对于您的所有私有子功能,请将其命名为标准格式,但目前将其命名为公共功能,例如:

公共子IAMU私有计算日期()
Public sub iamprivate_getsetfunction()

完成宏后,只需在编辑器中查找所有“Public sub”并将其替换为“Private sub”。

简短回答 打组合

CTRL+空格键

然后开始输入子名称,如图所示

长话短说 你在编程方面所做的一切都很重要。当您决定将子/函数/变量设置为私有时,您这样做是有原因的,您需要了解这将如何影响访问级别和“范围”

成员的范围由其访问级别决定,在VBE中,任何私有且符合其父成员资格的内容都不会获得intelli sense。简单地说,因为你不能(不应该能够访问它)从外面

因为您的
MyPrivateSub
访问级别是
Private
您无法通过使用
Module1限定模块来使用intelli sense访问它。

简短回答 打组合

CTRL+空格键

然后开始输入子名称,如图所示

长话短说 你在编程方面所做的一切都很重要。当您决定将子/函数/变量设置为私有时,您这样做是有原因的,您需要了解这将如何影响访问级别和“范围”

成员的范围由其访问级别决定,在VBE中,任何私有且符合其父成员资格的内容都不会获得intelli sense。简单地说,因为你不能(不应该能够访问它)从外面



因为您的
MyPrivateSub
访问级别是
Private
您不能通过使用
Module1限定模块来使用intelli sense访问它。

我怎么说是正确的,但是如果您从新开始,可能会有另一个问题让我问您一个问题@roryap,您将如何处理
Module1.MyPrivateSub()
,或者从
Module1.MyPublicSub()中获得哪些功能?为什么首先需要引用它?@mehow--我在模块内部调用私有方法,在其他模块外部调用公共方法。这些方法包含多个位置所需的代码(请参阅)。@Alex--您能详细说明一下吗?@roryap您如何调用它?干什么与这一切有关系我不知道;)似乎你还没有提出现实生活中的问题,你的SSCE也没有真正表达你对我的看法,但如果你是从新开始的,可能会有另一个问题让我问你一个问题@roryap,你会如何处理
Module1.MyPrivateSub()
或者您从
模块1.MyPublicSub()中获得了什么功能?为什么首先需要引用它?@mehow--我在模块内部调用私有方法,在其他模块外部调用公共方法。这些方法包含多个位置所需的代码(请参阅)。@Alex--您能详细说明一下吗?@roryap您如何调用它?干什么与这一切有关系我不知道;)似乎你还没有提出现实生活中的问题,你的SSCCE也没有真正表达出你在没有冒犯之后的真实想法,但我认为这是一种过分的做法。你所需要做的就是把
Private
改为
Public
->写你的代码->然后把它换回
Private
@mehow我认为如果有很多函数的话会更好,但我想你是对的~无意冒犯,但我认为这是一种过分的做法。你所需要做的就是将
Private
更改为
Public
->编写你的代码->然后将其交换回
Private
@mehow我认为如果有大量的函数,这样做会更好,但我想你是对的~令人困惑的是,
Module1.MyPrivateSub
是VBA允许的,在
Module1
中,却没有显示在列表中,好像Intellisense不知道当前的模块是什么name@z抱歉,有什么让人困惑的?它是
私有
的访问级别吗?如果某个对象在VBA中是
private
,则可以从同一模块访问该对象,但必须使用
Module1对其进行限定。
不允许调用其私有方法,也不允许从何处调用该对象。是的,如果从同一模块调用,则可以module@z对不起,我现在很困惑
ctrl+space
允许您调用所有成员,而不考虑其访问级别。当您通过
Module1.
限定私有
MyPrivateSub
时,就像尝试全局访问它一样-点语法。既然你已经把它保密了,我觉得不允许