4

私は Excel アドインに取り組んでおり、障害にぶつかっています。

Excel ワークブックのシートでコンボボックスを更新したいと考えています。現在、foreach ループでこれを行うことができます。ただし、これは、実行時に追加または削除されたシートのみを取得するという意味で制限されています。私のアドインは「シートの更新」ボタンで粘着性があるように見えますが、可能であればそれを避けたいと思います.

理想的には、ワークシート オブジェクトをコンボボックスにデータバインドできるので、介入なしでオンザフライで更新できます。しかし、私の研究では、それをサポートしていないことが判明しました。私は開発用コンピューターの前にいないので、後で試したことはありませんが、IList を継承しないため、データソースとして機能しないため、ほぼ肯定的です。

誰かが似たようなことをしましたか?私は本当にこれを正しく機能させたいと思っています。

ありがとうございました!

4

2 に答える 2

3

Excel.Application オブジェクトにはWorkbookNewSheet、新しいシートが追加されたときに発生するイベントがあります。残念ながら、シートが削除されたときに発生するイベントはないようです。

DropDownコンボボックスのイベントにコンボボックスの更新コードを入れることができます。コンボボックスが開いているときに起動し、コードはリストが表示される前にコンボボックスの項目を更新できます。

于 2012-10-26T23:55:44.783 に答える
2

WarrenG のドロップダウン イベントのアイデアが気に入っています。それが機能する場合、それは理想的なようです。それ以外の場合は、ブックの Sheet_Activate イベントを使用することをお勧めします。これは、シートが作成または削除されたときに、少なくともユーザーによって行われた場合に発生します。

C# では、イベントをインスタンス化し、ハンドラーを作成する必要があります。これは実際には Form_Load イベントで行うことができるため、フォームがインスタンス化されるとイベント ハンドラが作成されます。Form.cs コードが次のようになるように、Interop.Excel への参照を設定する必要があります。

したがって、 Form_Load イベントは次のようになります。

using Excel = Microsoft.Office.Interop.Excel;

namespace ExcelWorkbook1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Globals.ThisWorkbook.SheetActivate +=
                new Excel.WorkbookEvents_SheetActivateEventHandler(
                ThisWorkbook_SheetActivate);
        }

        private void ThisWorkbook_SheetActivate(object Sh)
        {
            //Fill your combobox here
        }
    }
}

編集:この MSDN サイトで基本的なコードを見つけました。

于 2012-10-27T00:35:54.097 に答える