设置添加的单元格值

时间:2012-12-19 20:50:07

标签: c# excel vba excel-addins

我将解释我发现的所有内容,但简而言之,我只是想要在代码中设置单元格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上的加载项项目中执行以下方法:

enter image description here

例外是:

  

System.Runtime.InteropServices.COMException未被用户代码处理   HResult = -2146827284消息=来自HRESULT的异常:0x800A03EC
  Source =“”ErrorCode = -2146827284 StackTrace:          在System.RuntimeType.ForwardCallToInvokeMember(String memberName,BindingFlags flags,Object target,Int32 [] aWrapperTypes,   MessageData&安培; MSGDATA)          在Microsoft.Office.Interop.Excel.Range.set_Value2(对象值)          在C:\ Users \ Antonio \ Dropbox_Temp \ visual studio \中的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

如何使宏和函数内的代码以相同的方式运行?当用户在公式中键入而非用户运行宏时,我想触发该方法的执行。 即使我有运行宏的函数我得到相同的异常我没有得到异常的唯一方法是运行的第一件事是宏......

1 个答案:

答案 0 :(得分:2)

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

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

您只需致电:

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

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