gpt4 book ai didi

C# Excel 下拉事件

转载 作者:行者123 更新时间:2023-11-30 17:55:37 25 4
gpt4 key购买 nike

我有一个 Excel 电子表格,它位于用 C# 编写的自动化测试应用程序中。测试应用程序使用最终统计数据填充工作表,然后使用电子表格生成指标。该过程的一部分是将下拉菜单放入电子表格的 L 列,并将其关联的 VBA 更改事件从应用程序写入工作表。

这是将下拉列表写入电子表格的代码 Excel.DropDown xlDropDown;

//set range for insert cell
range = wrkSheet.get_Range("L" + (x + 9).ToString() + ":L" + (x + 9).ToString());

//insert the dropdown into the cell
xlDropDown = xlDropDowns.Add((double)range.Left, (double)range.Top, (double)range.Width, (double)range.Height, true);

//set the nbame of the new dropdown
xlDropDown.Name = "expFail" + (x + 1).ToString();

//assign dropdown name to cmbName
cmbName = xlDropDown.Name;

//call function to write change macro for this box
cmbWriteMacro(cmbName, xlApp, xlBook, wrkSheet);

cmbWrite 函数:

    StringBuilder sb;
VBA.VBComponent xlModule;
VBA.VBProject prj;
string modName;
int modExists;

prj = wrkBook.VBProject;
modExists = 0;

sb = new StringBuilder();

//build string with module code
sb.Append("Sub " + cmbName + "_Change()" + "\n");
sb.Append("\t" + "Call lstBox_Update(" + cmbName + ")" + "\n");
sb.Append("End Sub");

foreach (VBA.VBComponent comp in prj.VBComponents)
{
modName = comp.Name;

if (modName == "Module2")
{
modExists = 1;
break;
}
}

//check to see if module already exists
if (modExists != 1)
{
//set an object for the new module to create
xlModule = wrkBook.VBProject.VBComponents.Add(VBA.vbext_ComponentType.vbext_ct_StdModule);
}
else
{
xlModule = wrkBook.VBProject.VBComponents.Item("Module2");
}

//add the cmbbox macro to the spreadsheet
xlModule.CodeModule.AddFromString(sb.ToString());

这会将以下 VBA 事件写入电子表格,以在记录失败时执行工作表中的操作。

Sub expFail1_Change(ByVal Target As Range)
Call lstBox_Update("expFail1")
End Sub

所有下拉菜单都根据选择调用相同的函数 (lstBox_Update)。

一切正常。下拉菜单显示在它们应该出现的位置,并且宏被正确写入电子表格。问题似乎是在更改选择时触发关联的更改事件。解决方案可能很简单,但我已经找遍了,似乎找不到答案

最佳答案

我只是根据您的代码做了一个小例子。经过一些谷歌搜索和测试一些源代码片段后,它归结为单行代码:

xlDropDown.Name = "expFail" + (x + 1).ToString(); // your code
xlDropDown.OnAction = xlDropDown.Name + "_Change"; // new code: IMPORTANT

Microsoft KB article 中找到此代码如何使用 Visual C# .NET 中的自动化创建 Excel 宏

看来您需要这行代码来设置某种委托(delegate)指向您的自定义 vba 代码。

如果您需要我的完整源代码,请告诉我,我会邮寄给您。

关于C# Excel 下拉事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14857173/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com