gpt4 book ai didi

vba - 在 VB/VBA 中使用 "CallByName"调用模块中包含的子或函数

转载 作者:行者123 更新时间:2023-12-04 04:14:08 29 4
gpt4 key购买 nike

使用 CallByName 在 classModule 中调用函数很容易
标准模块中的函数怎么样?

''#inside class module
''#classModule name: clsExample
Function classFunc1()
MsgBox "I'm class module 1"
End Function
''#
''#inside standard module
''#Module name: module1
Function Func1()
MsgBox "I'm standard module 1"
End Function
''#
''# The main sub
Sub Main()
''# to call function inside class module
dim clsObj as New clsExample
Call CallByName(clsObj,"ClassFunc1")

''# here's the question... how to call a function inside a standard module
''# how to declare the object "stdObj" in reference to module1?
Call CallByName(stdObj,"Func1") ''# is this correct?

End Sub

最佳答案

尽管这是一个老问题,并且 OP 在标准模块中要求 CallByName,但正确的建议分散在答案和评论中,有些可能不是那么准确,至少在 2020 年。
正如 SlowLearner 所说,Application.run 确实返回一个 Variant,这样,下面的两个分支都是等效的,除了处理错误,正如围绕 Horowitz 的回答所评论的那样:

Dim LoadEnumAndDataFrom as Variant
'FunctionName returns a Variant Array
if fCallByName then
LoadEnumAndDataFrom = CallByName(ClassObj, "FunctionNameAtClass", VbMethod)
else
'After moving back function for a standard module
LoadEnumAndDataFrom = Application.Run("StandardModuleName" & "." & "FunctionNameAtStandard")
endif

我实际上只是在上面做了这个并且完全没有错误,在 Word、Excel 和 Access 中进行了测试,并且都返回了相同的 Array。

不幸的是,有一个异常(exception):Outlook 的对象模型受到太多保护,它没有 Run 方法。

关于vba - 在 VB/VBA 中使用 "CallByName"调用模块中包含的子或函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2695198/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com