5

C# で Excel アドイン プロジェクトを作成しました。これで、ソリューションには、クラス ThisAddin を持つファイル ThisAddin.cs が含まれます。後で Form というアイテムを同じソリューションに追加しました。フォームでボタンをクリックすると、そのボタン クリック イベントに対して、ThisAddin.cs ファイル内のメソッドを呼び出します。

namespace ExcelAddIn
{
    public partial class ThisAddIn
    {
        public void RefreshExcelData()
        {
        }
    }
}

MyForm.cs で、ThisAddin クラスのオブジェクトを作成しようとすると、Thisaddin クラスには 0 引数を取るコンストラクターがないというコンパイル エラーが発生します。

private void btnUploadTestCases_Click(object sender, EventArgs e)
{
    ThisAddIn objrefresh = new ThisAddin();
}

ここで何が欠けていますか?

4

2 に答える 2

14

あなたは間違った方向から問題に取り組んでいます。ボタンをクリックすると、新しいアドインを作成したくありません。実際に必要なのは、Excel の起動時に VSTO によって作成されたアドイン インスタンスにアクセスすることですGlobals.ThisAddIn

フォームのコードを次のように変更します。

private void btnUploadTestCases_Click(object sender, EventArgs e)
{
    var addIn = Globals.ThisAddIn;
    addIn.RefreshExcelData();           
}

...そしてそれは魅力的に働くはずです。

そうは言っても、このメソッドが ThisAddIn にある正当な理由はありますか? 一般に、ThisAddIn は、Excel の起動時またはシャットダウン時にアドインを接続および破棄するために使用する必要があり、可能な限り少ないロジックを配置することをお勧めします。

于 2012-08-19T23:29:34.623 に答える
3

次のコードを使用します。

Globals.ThisAddIn.Application.StatusBar = "Referesh clicked!!!."; Globals.ThisAddIn.RefreshExcelData();

関数が残っていることを確認してくださいpublic

于 2012-09-12T13:57:10.670 に答える