错误: 不能删除一个 Excel 列表的行从命令按钮的 Click 事件

文章翻译 文章翻译
文章编号: 823988 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

症状

您所生成托管的代码扩展的 Office Excel 2003。您的解决方案使用 MSForms 命令按钮 控件的 Click 事件从位于工作表上的 列表 对象中删除行。当您单击按钮可删除 列表 行时,行不会被删除,并且您可能会收到运行时错误。

状态

Microsoft 已经确认这是 Office Excel 2003 中的错误。

解决方案

要解决此问题,请确保该 命令按钮 没有焦点时删除列表的行。使用下列方法之一:
  • 命令按钮TakeFocusOnClick 属性设置为 false

    -或者-
  • 重新选择当前的工作表选定内容,以获得焦点离开 命令按钮

替代方法

要变通解决此问题,请使用下列方法之一:
  • 命令按钮 控件 TakeFocusOnClick 属性设置为 false
    protected void ThisWorkbook_Open()
    {
    	//Get a reference to the first worksheet.
    	ws = (Excel.Worksheet)(ThisWorkbook.Worksheets[1]);
    
    	//Set up the Click event handler for CommandButton1.
    	cb = (MSForms.CommandButton)(this.FindControl("CommandButton1"));
    	cb.Click+= new MSForms.CommandButtonEvents_ClickEventHandler(cbClick);
    
    	cb.TakeFocusOnClick = false;
    }
    


    -或者-
  • 当前工作表 选择 要从 命令按钮 中删除焦点调用 Select 方法:
    private void cbClick()
    { 
    	ThisApplication.Selection.GetType().InvokeMember("Select",
    		System.Reflection.BindingFlags.Public | 
    		System.Reflection.BindingFlags.InvokeMethod | 
    		System.Reflection.BindingFlags.Instance,
    		null,
    		ThisApplication.Selection,
    		null);
    	
    	ws.ListObjects[1].ListRows[1].Delete();
    }
    

更多信息

重现行为的步骤

  1. 启动 Microsoft Visual Studio.net 2003年。
  2. 文件 菜单上指向 新建,然后单击 项目
  3. 在项目类型的列表中,展开 Microsoft Office 系统项目,然后单击 Visual C# 项目。在模板列表中选择 Excel 工作簿,然后单击 确定
  4. 单击 Microsoft Office 项目向导 中的 完成
  5. 按 F5 键运行项目,然后在 Excel 中打开该工作簿。
  6. 修改工作簿,如下所示:
    1. 选择单元格 A1。
    2. 数据 菜单上指向 列表,然后单击 创建列表。此时将显示 创建列表 对话框。单击 确定
    3. 将文本添加到单元格 A2、 A3 和 A4 (a2: a4)。
    4. 视图 菜单上指向 工具栏,然后单击 控件工具箱
    5. 绘制工作表上的一个 命令按钮 控件。 默认名称是 CommandButton1
    6. 保存了的工作簿,然后退出 Excel。
  7. 将下面的代码添加到 Thisworkbook.cs 代码模块:
    private MSForms.CommandButton cb;
    private Excel.Worksheet ws;
    
    protected void ThisWorkbook_Open()
    {
    	//Get a reference to the first worksheet.
    	ws = (Excel.Worksheet)(ThisWorkbook.Worksheets[1]);
    
    	//Set up the Click event handler for CommandButton1.
    	cb = (MSForms.CommandButton)(this.FindControl("CommandButton1"));
    	cb.Click+= new MSForms.CommandButtonEvents_ClickEventHandler(cbClick);
    }
    
    private void cbClick()
    {
    	try
    	{
    		//Delete the first row in the list object.
    		ws.ListObjects[1].ListRows[1].Delete();
    	}
    	catch (Exception ex)
    	{
    		System.Diagnostics.Debug.WriteLine(ex.Message);
    		MessageBox.Show(ex.Message);
    	}
    }
    
  8. 按 F5 键生成并运行该项目。
  9. 单击 CommandButton1

    结果删除列表中的一行时,捕获异常。 您会收到以下错误消息
    异常从 HRESULT: 0x800A03EC

属性

文章编号: 823988 - 最后修改: 2007年1月15日 - 修订: 2.3
这篇文章中的信息适用于:
  • Microsoft Office Excel 2003
  • Microsoft Visual Studio Tools for the Microsoft Office System version 2003
关键字:?
kbmt kbbug kbautomation kbnofix KB823988 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 823988
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com