Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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_Excel - Fatal编程技术网

Vba 在其他模块中声明可由其他模块访问但用户无法访问的子/函数

Vba 在其他模块中声明可由其他模块访问但用户无法访问的子/函数,vba,excel,Vba,Excel,我有一个模块ModuleA,包含用户将在电子表格上使用的Public功能: Public Function UserCanSeeThis() As String UserCanSeeThis = "Hello, " & UserCannotSeeThisButModuleACan() & " user" End Function 我有一个模块ModuleB,其中包含一个我想在ModuleA中使用的函数,但我不希望用户在将=写入单元格或阅读公式字典时在可用函数列表中看到:

我有一个模块
ModuleA
,包含用户将在电子表格上使用的
Public
功能:

Public Function UserCanSeeThis() As String
    UserCanSeeThis = "Hello, " & UserCannotSeeThisButModuleACan() & " user"
End Function
我有一个模块
ModuleB
,其中包含一个我想在
ModuleA
中使用的函数,但我不希望用户在将
=
写入单元格或阅读公式字典时在可用函数列表中看到:

Function UserCannotSeeThisButModuleACan() As String
    UserCannotSeeThisButModuleACan = "my dear"
End Function
我应该如何在
ModuleB
中声明函数,以便
ModuleA
可以看到它,但用户不能看到

p.s.我搜索了网站,只找到了
Sub
的“解决方案”,我可以将
Sub
声明为
Private
,然后使用
Application.Run“mySub>从另一个模块调用它。

但我希望VBA中有一些更成熟的“友谊”概念

模块b
顶部指定
选项专用模块
;公共成员不会(明显地)暴露给用户,但可以从VBA项目内的任何地方随时获得


你的
Private
+
应用程序。运行
hack是。。嗯,一个黑客。不要这样做-使/保留public成员
public
,并使用
选项Private module
从宏列表中隐藏模块。谢谢,这正是我所需要的。我已经在使用“Option Private Module”,但仍然没有将函数声明为Public(因此另一个模块没有看到它,我认为它不是解决方案)。如果对宏进行可选参数,它也可以工作。不会出现在宏列表中,但可以通过vba立即启动window@PatrickLepelletier当然,除了我倾向于删除一个伪造的未使用参数,它只是用来做
选项私有模块的工作。。。可能是“未来的自我”OP,或者任何继承该代码的人;-)