You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在UiPath中读取作为COM__Object传递的自定义VBA类对象成员

解决UiPath读取VBA返回自定义COM对象成员的问题

我之前也踩过COM互操作的类似坑,给你几个实打实的解决方案:

一、先让VBA自定义类的成员对COM可见

你的CInputDBEntries类里的字段都是Private的,COM客户端(比如UiPath)根本没法访问这些私有成员。必须给每个私有字段添加Public的Property Get方法,才能让UiPath通过COM获取到值:

' 在CInputDBEntries类模块中补充以下代码
Public Property Get Title() As String
    Title = strTitle
End Property

Public Property Get Value() As String
    Value = strValue
End Property

Public Property Get Integrity() As Boolean
    Integrity = boolIntegrity
End Property

修改后,你的ReadRelevantEntries方法返回的对象,就能被UiPath识别出这些公共属性了。

二、在UiPath里直接读取COM对象属性,别瞎转换

不用写CType(listExcelEntries, Object)这种无效转换,直接用UiPath的Get Property活动就能搞定:

  • 把VBA返回的COM__Object(也就是你的listExcelEntries变量)作为活动的TargetObject
  • 在PropertyName里填写你刚在VBA类里定义的属性名,比如Title、Value、Integrity
  • 把结果存入对应的变量(字符串变量存标题/值,布尔变量存完整性标记)

如果要处理多个对象,别用VBA的Collection,建议改成返回数组或者Scripting.Dictionary(COM兼容性更好):

改用数组的VBA示例:

Public Function ReadRelevantEntries() As Variant
    Dim entries() As CInputDBEntries
    ' 初始化数组并添加对象(示例两个元素)
    ReDim entries(0 To 1)
    Set entries(0) = New CInputDBEntries
    entries(0).strTitle = "Test1"
    entries(0).strValue = "Value1"
    entries(0).boolIntegrity = True
    
    Set entries(1) = New CInputDBEntries
    entries(1).strTitle = "Test2"
    entries(1).strValue = "Value2"
    entries(1).boolIntegrity = False
    
    ReadRelevantEntries = entries
End Function

在UiPath里接收数组后,用For Each循环遍历,再对每个元素用Get Property读取属性值就行。

三、解决Collection转换的CastTypeException

VBA的Collection和.NET的Microsoft.VisualBasic.Collection只是名字相同,实际是不同的COM类型,直接转换肯定报错。如果非要用Collection,在UiPath里可以把它当成System.Collections.IEnumerable来遍历,或者用Invoke Method调用它的Item方法取元素:

  • 用Invoke Method活动,TargetObject是VBA返回的Collection,MethodName填Item,参数填索引(注意VBA Collection索引从1开始)
  • 拿到单个元素后,再用Get Property读取属性

不过还是更推荐用数组或者Scripting.Dictionary,能彻底避开这种类型不匹配的麻烦。

内容的提问来源于stack exchange,提问作者Zate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 03:45:01