ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2061|回复: 3

[求助] 学习VSTO时用C#编写的代码运行时没反应

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-10-17 00:24 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
如题,在学习VSTO之旅系列(二):创建Excel解决方案时试图五、创建Excel文档级自定义项

测试时,在复选框选择”语文“,没想到单击按钮时居然没反应,不知为何。
而在C#编写的代码故意弄一个小bug时,错误列表仍会显示出错信息,纠正后出错信息消失。由此看来似乎C#编写的代码不是完全没反应,可就是在测试时,单击查找不及格按钮时,程序没动静,即使代码完全照搬原文的也一样......

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-10-17 06:55 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-10-17 15:00 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

自己摸索着解决了这个问题,代码如下(除了Sheet1_Startup、button1_Click两个过程需手工编写外,其他均为VSTO自动生成):
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Windows.Forms;
  7. using System.Xml.Linq;
  8. using Microsoft.Office.Tools.Excel;
  9. using Microsoft.VisualStudio.Tools.Applications.Runtime;
  10. using Excel = Microsoft.Office.Interop.Excel;
  11. using Office = Microsoft.Office.Core;

  12. namespace ExcelWorkbook1
  13. {
  14.     public partial class Sheet1
  15.     {
  16.         private void Sheet1_Startup(object sender, System.EventArgs e)
  17.         {
  18.             txtResult.Height = 120;
  19.         }

  20.         private void Sheet1_Shutdown(object sender, System.EventArgs e)
  21.         {
  22.         }

  23.         #region VSTO 设计器生成的代码

  24.         /// <summary>
  25.         /// 设计器支持所需的方法 - 不要
  26.         /// 使用代码编辑器修改此方法的内容。
  27.         /// </summary>
  28.         private void InternalStartup()
  29.         {
  30.             this.button1.Click += new System.EventHandler(this.button1_Click);
  31.             this.Startup += new System.EventHandler(this.Sheet1_Startup);
  32.             this.Shutdown += new System.EventHandler(this.Sheet1_Shutdown);

  33.         }

  34.         #endregion

  35.         private void button1_Click(object sender, EventArgs e)
  36.         {
  37.             // 清除textbox中的内容
  38.             txtResult.Clear();

  39.             // 从复选框中获得选择的科目索引
  40.             int subjectIndex = cbxsubjects.SelectedIndex;
  41.             if (subjectIndex == -1)
  42.             {
  43.                 MessageBox.Show("请先选择一个科目");
  44.                 return;
  45.             }

  46.             // 获得选择的科目名称
  47.             string subjectName = cbxsubjects.SelectedItem.ToString();
  48.             // 获得工作表对象
  49.             Excel.Worksheet worksheet = (Excel.Worksheet)Globals.ThisWorkbook.ActiveSheet;

  50.             for (int row = 2; row < worksheet.UsedRange.Rows.Count + 1; row++)
  51.             {
  52.                 Excel.Range rng = (Excel.Range)worksheet.Cells[row, subjectIndex + 2];
  53.                 Excel.Range rng1 = (Excel.Range)worksheet.Cells[row, 1];
  54.                 if (rng.Value < 60)
  55.                 {
  56.                     txtResult.Text += rng1.Value + "; ";
  57.                 }
  58.             }
  59.             if (txtResult.Text.Length == 0)
  60.             {
  61.                 txtResult.Text = subjectName + "没有不及格的同学";
  62.             }
  63.         }
  64.     }
  65. }
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-10-17 15:04 | 显示全部楼层
VBA万岁 发表于 2015-10-17 15:00
自己摸索着解决了这个问题,代码如下(除了Sheet1_Startup、button1_Click两个过程需手工编写外,其他均 ...

以下截图为设置复合框下拉选项的方法:

1.jpg
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-6-8 10:55 , Processed in 0.030841 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表