2012-12-19 46 views
0

我将解释我发现的所有内容,但总之我只想想要在代码后面设置单元格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 Message = Exception from HRESULT:0x800A03EC
Source =“”ErrorCode = -2146827284 StackTrace: at System.RuntimeType.ForwardCallToInvokeMember(String memberName,BindingFlags flags,Object target,Int32 [] aWrapperTypes, MessageData & msgData) at Microsoft.Office.Interop.Excel.Range.set_Value2(Object value) at ReadWrite.ImportData()in C:\ Users \ Antonio \ Dropbox_Temp \ visual studio \ Probe add in 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 

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

+0

Excel VBA Sub不返回,但函数确实。所以你的'功能测试'不...... – bonCodigo

+0

最后一个'Function Test()'怎么办?那一个返回。它调用ImportData方法。该方法不能改变单元格A1的值为什么?如果我从宏运行相同的方法,它工作正常。谢谢您的帮助! –

+0

你真的想要做什么,让一个加载项在特定时间更改单元格值?每秒之后? – bonCodigo

回答

2

不知道,但你有问题可能是由于这样的事实:当你的功能被解雇Excel应用程序是在编辑模式,所以当您尝试插入数据不能接受任何外来的输入,因此除外。

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

从你的细胞,你可以简单的叫:

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

不时您RTD服务器将通知新数据的Excel,让Excel的回拨找回他们时,它已准备就绪。

相关问题