如何使用VB.net读取作为COM__Object传递的自定义VBA类对象的成员? (UIPath)

时间:2019-02-19 13:41:29

标签: excel vba vb.net com

我有一个VBA函数,该函数返回我自己的类模块“ CInputDBEntries”的对象。

UIPath将该对象作为COM__Object接收,要读取它,我需要进行一些CType转换。但是,无论我怎么做,都无法访问对象的成员(值)。

我已经尝试将其转换为“对象”,但是无法访问这些值。 我还尝试将多个类对象另存为一个Collection,但是由于存在错误(从VBACollection到Microsoft.VisualBasic.Collection = COM CastTypeException),CType转换失败了

我也将其发布在UIPath论坛上:https://forum.uipath.com/t/invoke-vba-how-to-read-the-retrieved-com-object-in-uipath-vba-function-returns-custom-type/96115

类定义:

Private strTitle As String
Private strValue As String
Private boolIntegrity As Boolean

方法:

Public Function ReadRelevantEntries() As CInputDBEntries
   Dim entry As CInputDBEntries

   entry.Title = "title"
   entry.Val = "value"
   entry.Integrity = True

   Set ReadRelevantEntries = entry
End Function

当前我的转换是这样的:CType(listExcelEntries,Object)

期望的结果是能够将值从COM__Object中提取出来,以便我可以读取2个字符串和我的bool变量。

1 个答案:

答案 0 :(得分:0)

找到解决方案:

这是错误的方法

var propertyInfo = comObject.GetType().GetProperty("PropertyName")

这是正确的方法

//get the value of comObject.PropertyName
object propertyValue = comObject.GetType().InvokeMember("PropertyName", System.Reflection.BindingFlags.GetProperty, null, comObject, null);

积分:https://smehrozalam.wordpress.com/2010/02/16/c-using-reflection-with-com-objects/