当我向电子表格添加按钮或链接时,点击事件有效。但是,当我保存电子表格时,关闭它并重新打开它,事件不会触发。
AddControl(xlApp, ((TaskPaneView)this.Parent).factory, "text", "A1");
public void AddControl(Microsoft.Office.Interop.Excel.Application xlApp, Microsoft.Office.Tools.Excel.ApplicationFactory factory, string controlText, string address)
{
Microsoft.Office.Interop.Excel.Worksheet nativeWorksheet = xlApp.ActiveWorkbook.ActiveSheet;
Microsoft.Office.Tools.Excel.Worksheet vstoWorksheet = factory.GetVstoObject(nativeWorksheet);
var btn = new Microsoft.Office.Tools.Excel.Controls.Button();
btn.Name = "link1";
btn.Text = controlText;
btn.Click += new EventHandler(btn_Click);
vstoWorksheet.Controls.AddControl(btn, nativeWorksheet.Range[address], controlText);
}
void btn_Click(object sender, EventArgs e)
{
}
打开WorkBook时是否有一种简单的方法可以再次连接事件?
我想我必须手动搜索工作簿中的按钮和AddHandler。
修改:这是记录在案的,但在关闭电子表格后没有提及问题:Adding Controls to a Worksheet at Run Time in an Application-Level Project
答案 0 :(得分:1)
我现在可能会采取另一种方式,使用代码创建VBA按钮以进入Add-In functionality:
VBA代码:
Dim oAddin As COMAddIn
Dim oCOMFuncs As Object
Set oAddin = Application.COMAddIns(ExcelAddInNameSpace")
Set oCOMFuncs = oAddin.Object
oCOMFuncs.CallAFunctionOfAddIn
或者使用上下文菜单的另一种方式(当超过NamedRanges时)。
来自MSFT的更多信息:
但问题出现了:如果您保存工作簿,请将其打开 无论是装有插件的机器还是装有清洁机器的机器 按钮这次不起作用!
因此我们可以看到通过加载项将控件添加到文档的表面 没有多大意义,因为控制可能会失去它 功能。这就是我们通常建议使用自定义任务的原因 窗格而不是将控件添加到文档的表面。看一看 在以下文件中:
http://msdn.microsoft.com/en-us/library/aa942864.aspx
http://msdn.microsoft.com/en-us/library/aa338197(v=office.12).aspx