DropDown的事件放在Excel中

时间:2014-05-04 18:50:13

标签: c# excel excel-vba excel-dna vba

我使用ExcelDNA,NetOffice和C#在Excel工作表中创建了几个DropDowns。下拉列表显示正确,但我无法弄清楚每次更改选择时如何绑定事件。正如您所注意到的那样,我按照此处的建议绑定到SheetChange事件http://www.c-sharpcorner.com/uploadfile/vasanthks/excel-dropdownlist-change-event-using-vba/任何帮助将不胜感激。

for (int i = 1; i < col + 1; i++)
{
      var comboRange = ActiveSheet.Cells[2, i];

            var combobox1 = currentSheet.Shapes.AddFormControl(XlFormControl.xlDropDown,
                Convert.ToInt32(comboRange.Left), Convert.ToInt32(comboRange.Top), Convert.ToInt32(comboRange.Width), Convert.ToInt32(comboRange.Height));
            combobox1.Name = "cmb_" + i;
            combobox1.Placement = XlPlacement.xlMoveAndSize;
            combobox1.ControlFormat.DropDownLines = 1;
            combobox1.ControlFormat.AddItem("Item1", 1);

            combobox1.Application.SheetChangeEvent += new Excel.Application_SheetChangeEventHandler(ComboBox_Changed);

        }
    }


    private void ComboBox_Changed(object sender, Excel.Range rng)
    {
        MessageBox.Show("Test", "Error",
                MessageBoxButtons.OK, MessageBoxIcon.Error);
    }

1 个答案:

答案 0 :(得分:1)

您使用的控件类型 - XlFormControl.xlDropDown - 不提供处理事件的任何解决方案。相反,您应该使用OleObject控件。这是一个代码片段,可以作为一个起点:

var combobox1 = currentSheet.Shapes.AddOLEObject(ClassType:="Forms.ComboBox.1",...

有关详细信息,请参阅this link。 接下来,您应该尝试添加ComboBox1_Change()事件。