arrays - 将参数数组传递给 CallByName VBA

标签 arrays vba callbyname

我正在使用 callByName I VBA 动态调用类的不同方法。根据方法的不同,我将拥有不同数量的参数,这些参数将保存在一个数组中。不幸的是 CallByName 接受一个 param 数组,因此传递一个变量数字并不简单。有没有办法解决这个问题,我找到了一个使用类型信息库的解决方案,但这似乎不适用于 VBA,即使我已将其添加为引用。下面是我想要的插图

 Public Sub Initialize_Object(ByRef TaskObject, Task_Collection)

 Dim Task_begin As Variant, Method_Parameters As Variant

 Task_begin = Task_Collection("Method")

 CallByName TaskObject, Task_begin, VbMethod, Method_Parameters

最佳答案

您可以通过更改方法签名将 CallByName 与数组一起用作参数:

#If VBA7 Or Win64 Then
  Private Declare PtrSafe Function rtcCallByName Lib "VBE7.DLL" ( _
    ByVal Object As Object, _
    ByVal ProcName As LongPtr, _
    ByVal CallType As VbCallType, _
    ByRef args() As Any, _
    Optional ByVal lcid As Long) As Variant
#Else
  Private Declare Function rtcCallByName Lib "VBE6.DLL" ( _
    ByVal Object As Object, _
    ByVal ProcName As Long, _
    ByVal CallType As VbCallType, _
    ByRef args() As Any, _
    Optional ByVal lcid As Long) As Variant
#End If

Public Function CallByName2(Object As Object, ProcName As String, args() As Variant)
   AssignResult CallByName2, rtcCallByName(Object, StrPtr(ProcName), VbMethod, args)
End Function

Private Sub AssignResult(target, result)
  If VBA.IsObject(result) Then Set target = result Else target = result
End Sub

这是一个使用示例:
Sub UsageExample()
  Dim obj As Object, arguments()

  Dim obj As New Class1
  arguments = Array(1, 3)

  CallByName2 obj, "MyMethod", arguments
End Sub

关于arrays - 将参数数组传递给 CallByName VBA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36313575/

相关文章:

按值调用与按名称调用在 Scala 日志记录库中的性能

arrays - Ruby - 数组交集(有重复项)

隐式类中的 Scala 按名称调用构造函数参数

java - 在 Tic-Tac-Toe 中寻找获胜者(使用 2-D 数组的 Java)

vba - 合并两列但仅合并某些单元格?

excel - 从网站下载文件

excel - 将每个工作表另存为单独的文档(仅限值)

scala - 按值调用和按名称等效

javascript - 我无法在 jQuery 事件函数之外访问 array/obj

javascript - Ruby on Rails - 将地理编码器对象作为谷歌地图标记数组