2012-12-19 86 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的回撥找回他們時,它已準備就緒。

相關問題