C# VB.NET通过Excel以ByRef的形式传递参数。应用程序运行不';使用Excel.Application时不更新变量,但在使用Object时有效
我在VB.NET中有一个运行Excel应用程序的类。该类具有返回Excel工作簿/应用程序实例的属性Excel.ApplicationC# VB.NET通过Excel以ByRef的形式传递参数。应用程序运行不';使用Excel.Application时不更新变量,但在使用Object时有效,c#,excel,vb.net,C#,Excel,Vb.net,我在VB.NET中有一个运行Excel应用程序的类。该类具有返回Excel工作簿/应用程序实例的属性Excel.Application Private m_ExcelProgramHandle As Microsoft.Office.Interop.Excel.Application ' Sets the Excel.App Instance m_ExcelProgramHandle = somefunc() Public ReadOnly Property ExcelProgramHand
Private m_ExcelProgramHandle As Microsoft.Office.Interop.Excel.Application
' Sets the Excel.App Instance
m_ExcelProgramHandle = somefunc()
Public ReadOnly Property ExcelProgramHandle() as Microsoft.Office.Interop.Excel.Application
Get
ExcelProgramHandle = m_ExcelProgramHandle
End Get
End Property
现在,我想从VB.NET应用程序调用Excel应用程序中的宏来传递和更新一些变量
以下是VBA宏:
Public Function pass_string_byref(byref str as String) as Integer
str = "abcde"
pass_string_byref = 1
End Function
Public Function pass_arr_byref(byref arr() as String) as Integer
ReDim arr(3)
arr(1) = "a"
arr(2) = "b"
arr(3) = "c"
pass_arr_byref = 1
End Function
下面是VB.NET调用宏的方式:
strArr = New String() {""}
retShort = sampleObj.ExcelProgramHandle.Run("pass_string_byref", str)
retShort = ssampleObj.ExcelProgramHandle.Run("pass_arr_byref", strArr)
但变量不会得到更新。但是,如果我将属性的数据类型从Excel.Application更改为Object,则它可以工作。
Private m_ExcelProgramHandleAsObj As Object
' Somewhere in the Constructor
' This is how its being set
m_ExcelProgramHandleAsObj = m_ExcelProgramHandle
Public ReadOnly Property ExcelProgramHandle() as Object
Get
ExcelProgramHandle = m_ExcelProgramHandleAsObj
End Get
End Property
有人能解释一下为什么会这样吗
我是否可以使用Microsoft.Interop.Excel.Application而不是Object?该类的其他成员正在使用ExcelProgramHandle属性,因此将其更改为Object可能会破坏该类。因此,我认为最好使用Excel.Application
谢谢 请提供一份报告。无法传递byref参数,并使用当前提供的值通过Val传递它们。这以前是有文档记录的,但显然在现代的简化帮助中不再有了。@GSerg感谢您提供的信息。我试图将基于VB6构建的类迁移到.NET。显然,这种使用VB6应用程序中的ByRef传递变量的方法似乎有效。我假设.NET中的行为将是相同的。但奇怪的是,如果我使用Object而不是Excel.App,它为什么会起作用,正如我在解决方法中提到的那样。我希望你能分享一些想法。谢谢谢谢你!实际上,将
应用程序
强制转换为对象确实允许通过应用程序传递参数byref。在Excel内部运行
。我不知道它为什么会发生,但它真的不应该发生。我只能推测这是同一种情况,但我想知道为什么它也会在.NET中发生。