1

Excel のアドインのプログラミングで奇妙な問題が発生しました。Excel にコントロールを追加したいのですが、このコードを使用して刺激を受けましたhttps://msdn.microsoft.com/en-us/library/cc442817.aspx

private void button_Click(object sender, RibbonControlEventArgs e)
{
    var worksheet = (Worksheet)Globals.ThisAddIn.Application.ActiveSheet;
    {
        const string buttonName = "MyButton";

        if (((RibbonCheckBox)sender).Checked)
        {
            var selection = Globals.ThisAddIn.Application.Selection as Range;
            if (selection != null)
            {
                var button =
                    new Microsoft.Office.Tools.Excel.Controls.Button();
                worksheet.Controls.AddControl(button, selection, buttonName);
            }
        }
        else
        {
            worksheet.Controls.Remove(buttonName);
        }
    }
}

しかし、ワークシートのコントロール メソッドは利用できず、アクセスできません。Microsoft.Office.Tools.Excel.v4.0.Utilities.dll アセンブリと次のステートメントを追加しました

using Microsoft.Office.Interop.Excel; 
using Microsoft.Office.Tools.Ribbon;
using Office = Microsoft.Office.Core;

ちなみに私はoffice 2007とvs 2013を使っているので、DebugInfoExeNameでofficeのバージョンを12に変更しました。

4

2 に答える 2

0

GetVstoObjectメソッドを使用して、ブック内のワークシートを表すホスト項目を取得し、現在選択されているセルに Button コントロールを追加する必要があります。

private void Button_Click(object sender, RibbonControlEventArgs e)
{
    Worksheet worksheet = Globals.Factory.GetVstoObject(
       Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets[1]);
    string buttonName = "MyButton";

    if (((RibbonCheckBox)sender).Checked)
    {
        Excel.Range selection = Globals.ThisAddIn.Application.Selection as Excel.Range;
        if (selection != null)
        {
            Microsoft.Office.Tools.Excel.Controls.Button button =
               new Microsoft.Office.Tools.Excel.Controls.Button();
            worksheet.Controls.AddControl(button, selection, buttonName);
        }
    }
    else
    {
        worksheet.Controls.Remove(buttonName);
    }
}
于 2015-04-17T14:33:40.063 に答える