私が見つけたすべてを説明しますが、要するに、コードビハインドでセル A1 の値を設定したいだけです。Create Excel Add-in - get cell value plus other linksを試しましたが、これらすべての手法はマクロで実行した場合にのみ機能しますが、関数から実行したいです。
それでは、説明を始めましょう。
関数と 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 Message=HRESULT からの例外: 0x800A03EC
Source="" ErrorCode=-2146827284 StackTrace: 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
マクロと関数内のコードを同じように実行するにはどうすればよいですか? ユーザーがマクロを実行したときではなく、ユーザーが式を入力したときにそのメソッドの実行をトリガーしたいと考えています。関数にマクロを実行させても、同じ例外が発生します例外が発生しない唯一の方法は、最初に実行されるものがマクロである場合です...