【问题标题】:Set value of cell in add in在 add in 中设置单元格的值
【发布时间】:2012-12-07 07:26:01
【问题描述】:

我将解释我发现的所有内容,但简而言之,我只是想在后面的代码中设置单元格 A1 的值。我已经尝试过Create Excel Add-in - get cell value 以及其他链接,所有这些技术只有在我在宏上运行它们但我想从函数中执行它们时才有效。

那么让我开始解释吧:

我不明白为什么当我在函数和 Sub 上运行相同的代码时会出现奇怪的行为。举个例子:

Dim TimeToRun

Sub Macro1()

    'Dim addIn As COMAddIn
    'Dim automationObject As Object
    'Set addIn = Application.COMAddIns("ProbeAddIn")
    'Set automationObject = addIn.Object

    'automationObject.ImportData

    MsgBox "Hello world"

End Sub

Sub Macro2()

    TimeToRun = Now + TimeValue("00:00:01")

    Application.OnTime TimeToRun, "Macro1" ' run Macro1 on 1 seconds

End Sub


Function Test()

    TimeToRun = Now + TimeValue("00:00:01")

    Application.OnTime TimeToRun, "Macro1" ' run Macro1 on 1 seconds

End Function

请注意Macro2 和函数Test 具有相同的代码。为什么如果我运行 Macro2 它可以正常工作(出现消息框)。但是,如果我转到一个单元格并输入=Test(),那么即使我有相同的代码,我也会收到错误!

我之所以展示这个例子是因为如果我通过直接运行宏来运行它,我在 Macro1 上注释掉的代码效果很好。如果我将该代码放在函数 Test 中,它将不起作用。该代码在我的 Visual Studio 插件项目中执行以下方法:

例外是:

System.Runtime.InteropServices.COMException 未被用户代码处理 HResult=-2146827284 消息=来自 HRESULT 的异常:0x800A03EC
源=“”错误代码=-2146827284 堆栈跟踪: 在 System.RuntimeType.ForwardCallToInvokeMember(字符串成员名称,BindingFlags 标志,对象目标,Int32 [] aWrapperTypes, 消息数据和消息数据) 在 Microsoft.Office.Interop.Excel.Range.set_Value2(对象值) 在 C:\Users\Antonio\Dropbox_Temp\visual studio\Probe 中的 ReadWrite.ImportData() 添加 test\ProbeAddIn\ProbeAddIn\Class1.cs:第 82 行 InnerException:

我得到了那个例外,因为我跑了:

Function Test()

    Dim addIn As COMAddIn
    Dim automationObject As Object
    Set addIn = Application.COMAddIns("ProbeAddIn")
    Set automationObject = addIn.Object                

    automationObject.ImportData

End Function

代替

Sub Test()

    Dim addIn As COMAddIn
    Dim automationObject As Object
    Set addIn = Application.COMAddIns("ProbeAddIn")
    Set automationObject = addIn.Object

    automationObject.ImportData

End Function

如何使宏和函数中的代码以相同的方式运行?我想在用户键入公式而不是在用户运行宏时触发该方法的执行。 即使我让函数运行宏,我也会得到同样的异常我没有得到异常的唯一方法是,如果首先运行的是宏......

【问题讨论】:

  • Excel VBA Sub 不会返回,但 Function 会。所以你的Function Test 不会...
  • 最后一个Function Test()呢?那个返回。它调用 ImportData 方法。那个方法不能改变单元格A1的值,为什么?如果我从宏运行相同的方法,它工作正常。感谢您的帮助!
  • 您真正想做的是制作一个加载项以在特定时间更改单元格值?每秒之后?
  • 我有一块板:am.renesas.com/products/tools/introductory_evaluation_tools/… 我能够读取变量的值。我想每 500 毫秒读取一次值。我可以用宏来做到这一点,但我想在 excel 中创建一个函数来做到这一点。我的方法的签名看起来像Read(memAddress as String, numberOfBytesToRead as integer)
  • 变量?还是单元格值?你能告诉我们你当前的宏吗?你为什么使用range1.Value2?为什么不value

标签: c# excel vba excel-addins


【解决方案1】:

不确定,但您遇到的问题可能是因为当您的函数被触发时,Excel 应用程序处于 编辑模式,因此无法接受来自外部的任何输入,因此当您尝试插入数据。

如果您想以干净的方式连续更新单元格,您需要一个 RTD 服务器

您只需从您的单元格中调用:

=RTD("my.super.rtdserver",,"mydata")

您的RTD 服务器会不时通知 Excel 新数据,并让 Excel 回调在数据准备就绪时检索它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-08
    • 2017-10-18
    • 1970-01-01
    相关资源
    最近更新 更多