1

ボタンまたはリンクをスプレッドシートに追加すると、クリックイベントが機能します。ただし、スプレッドシートを保存して閉じてから再度開くと、イベントは発生しません。

AddControl(xlApp, ((TaskPaneView)this.Parent).factory, "text", "A1");

public void AddControl(Microsoft.Office.Interop.Excel.Application xlApp, Microsoft.Office.Tools.Excel.ApplicationFactory factory, string controlText, string address)
{
    Microsoft.Office.Interop.Excel.Worksheet nativeWorksheet = xlApp.ActiveWorkbook.ActiveSheet;
    Microsoft.Office.Tools.Excel.Worksheet vstoWorksheet = factory.GetVstoObject(nativeWorksheet);
    var btn = new Microsoft.Office.Tools.Excel.Controls.Button();
    btn.Name = "link1";
    btn.Text = controlText;
    btn.Click += new EventHandler(btn_Click);
    vstoWorksheet.Controls.AddControl(btn, nativeWorksheet.Range[address], controlText);
}

void btn_Click(object sender, EventArgs e)
{

}

WorkBookを開いたときにイベントを再度フックする簡単な方法はありますか?

ブックでボタンとAddHandlerを手動で検索する必要があると思います。

編集:これは文書化されていますが、スプレッドシートを閉じた後の問題については言及されていません:アプリケーションレベルのプロジェクトで実行時にワークシートにコントロールを追加する

4

1 に答える 1

1

ここに画像の説明を入力してください

ドキュメントを保存してから閉じると、すべての動的ホストコントロールがドキュメントから削除されます。基盤となるネイティブOfficeオブジェクトのみが残ります。


私は今、別の方法でそれを行うかもしれません、アドイン機能を利用するためのコードでVBAボタンを作成します:

VBAコード:

Dim oAddin As COMAddIn
Dim oCOMFuncs As Object
Set oAddin = Application.COMAddIns(ExcelAddInNameSpace")
Set oCOMFuncs = oAddin.Object
oCOMFuncs.CallAFunctionOfAddIn

または、コンテキストメニューを使用する別の方法(NamedRangesを超える場合)。


MSFTからの詳細情報:

しかし、ここで問題が発生します。ワークブックを保存する場合、アドインがインストールされているマシンまたはクリーンなマシンのいずれかでブックを開くと、今回はボタンが機能しません。

したがって、アドインを介してドキュメントの表面にコントロールを追加しても、コントロールの機能が失われる可能性があるため、あまり意味がないことがわかります。これが、ドキュメントの表面にコントロールを追加する代わりに、通常、カスタム作業ウィンドウを使用することをお勧めする理由です。次のドキュメントをご覧ください。

http://msdn.microsoft.com/en-us/library/aa942864.aspx

http://msdn.microsoft.com/en-us/library/aa338197(v=office.12).aspx

于 2012-08-23T03:55:08.953 に答える