随笔分类 -  EXCEL VSTO

摘要:之前在VSTO里添加过几次Ribbon,没有发现什么问题。但前几天装了一个微软出品的VS的插件Productivity Power Tools后,只要一添加Ribbon,VS2010就崩溃掉。初步估计应该是由这个插件引起的,所以卸载这个插件,但VS2010还是崩溃,而且更让我崩溃的是:修复安装VS2010后问题依旧。在微软官方的VSTO论坛上发了个帖子,但估计没人碰到过,都几天了也没找到答案。如果... 阅读全文
posted @ 2010-09-02 23:51 RobinLao 阅读(755) 评论(0) 推荐(0)
摘要:这个方法其实就是调用了F5定位里的columndifferences,但两者有一点不同的地方:定位里的ColumnDifferences只能够以所选区域的第一个单元格做参照,而本方法可以自己定义参照单元格,即代码中的Range["a2"]。 阅读全文
posted @ 2010-08-29 21:42 RobinLao 阅读(1136) 评论(0) 推荐(0)
摘要:前几天有位朋友发邮件给我,问的这个问题,代码弄的差不多了,但碰到一个几天都没琢磨出来的问题:问题出在第四行,Locals里显示series.Values是一个object[],但(object[])series.Values报Unable to cast object of type ‘System.Object[*]‘ to type ‘System.Obje... 阅读全文
posted @ 2010-08-07 09:30 RobinLao 阅读(1634) 评论(4) 推荐(0)
摘要:private void button1_Click(object sender, EventArgs e){ Excel.Shape lineA = Globals.Sheet1.Shapes.AddLine(25, 140, 495, 140); Excel.Shape lineB = Globals.Sheet1.Shapes.AddLine(495, 140, 495, 305); Exc... 阅读全文
posted @ 2010-06-08 22:08 RobinLao 阅读(521) 评论(0) 推荐(0)
摘要:VBA里直接用“Calendar.Value”就可以获取日历控件的值了,但VSTO里竟然没有这个属性。找了半天,原来要这样搞才行:看来VBA和VSTO里的日历控件差异很大呀,总结一下:1、VBA里叫Calendar Control,VSTO里叫monthCalendar。2、VSTO的日历控件支持17XX年的日期,不过输入进EXCEL变成文本。2、VSTO里的日历控件更强大... 阅读全文
posted @ 2010-05-31 23:55 RobinLao 阅读(1381) 评论(0) 推荐(0)
摘要:private void button1_Click(object sender, EventArgs e){ for (int i = 1; i <= Application.CustomListCount; i++) { object obj = Application.GetCustomListContents(i); Array arr = obj as Array; Message... 阅读全文
posted @ 2010-05-06 21:09 RobinLao 阅读(527) 评论(0) 推荐(0)
摘要:昨天一个同事问我,怎么在VSTO的控件上运行工作簿中的VBA代码。这个很简单,VSTO提供了一个Run方法,可以直接运行Marco,就和你在VBA的一个过程里调用另一个过程一样。VSTO里的代码:VBA代码:很简单吧。注意:我现在用的是VS2010,所以Run方法后面的可选参数可以省略。如果你用的还是VS2008,你还是得一个个的把”missing”写上。 阅读全文
posted @ 2010-04-28 23:12 RobinLao 阅读(1165) 评论(0) 推荐(0)
摘要:大家都知道,C#里没有直接的方法能转置一个数组,所以一般都用循环来完成。为此我上次专门在CSDN上发了个贴,询问VSTO里用C#有没有办法可以不用循环来转置数组,但没得到结果,为此我还抱怨了微软好久,C#的功能竟然还不及VBA。今天,突然闪过一个念头,VBA里可以调用EXCEL的工作表函数,那VSTO里是否也可以呢?试了一下,原来真可以,郁闷了,以前转了那么多弯路。测试代码如下:private v... 阅读全文
posted @ 2010-04-23 20:46 RobinLao 阅读(873) 评论(0) 推荐(0)
摘要:今天碰到了个问题,发现无法使用某些对象事件,+=后双TAB出不来。四处找原因,GOOGLE、MSDN上翻了许久,终于找到了原因和解决方法。原因:写了一个同名的方法,而VSTO处理规则应该是方法>事件,所以有了同名的方法后事件就无法使用了。如已经写了下面的方法:如果再写Globals.ThisWorkbook.ActivateEvent+=,双TAB后会报以下提示:此类中已存在处理程序&rdq... 阅读全文
posted @ 2010-04-14 23:52 RobinLao 阅读(516) 评论(0) 推荐(0)
摘要:为了测试代码的通用性,我装了2003和2007的双Office,但今天却碰到了个问题,在VS2008下开发了一个EXCEL2003加载宏,保存后再次打开后会弹出转换向导。不当心点了个"完成",结果就郁闷了,只能重写。MS的VSTO论坛上查了一下,还真找到了解决方法,原来只要把工具>选项>Office工具>项目升级里的“始终升级到已安装版本Office”取消... 阅读全文
posted @ 2010-04-01 22:43 RobinLao 阅读(592) 评论(0) 推荐(0)
摘要:今天某论坛上看到有人问VBA里的Msgbox在C#里怎么没有了。刚学C#那会,我也迷惑了一阵,后来MSDN上一查,原来Msgbox在C#里改名字了:Messagebox.Show 。小知识,希望对从VBA到C#的初学者有用。 阅读全文
posted @ 2010-04-01 21:41 RobinLao 阅读(473) 评论(0) 推荐(0)
摘要:int i = 0, k = 0;DirectoryInfo dir = new DirectoryInfo(@"c:\windows");DirectoryInfo[] dirs = dir.GetDirectories();foreach (DirectoryInfo folder in dirs){i++;this.Range["a" + i, missing].Value2 = folde... 阅读全文
posted @ 2010-03-22 23:25 RobinLao 阅读(599) 评论(0) 推荐(0)
摘要:VB.NET的代码如下同样是object类型的Sh,VB.NET里可以直接调用name属性,而在C#中需要把Sh强制转化为Excel.Worksheet后才能调用Sh的worksheet的属性。从VBA转到学习C#需要改变的观念真多,希望这点经验对和我一样的VSTO+C#的初学者有点用。 阅读全文
posted @ 2010-03-19 23:57 RobinLao 阅读(883) 评论(0) 推荐(0)
摘要:private void button1_Click(object sender, EventArgs e) { StringBuilder sb = new StringBuilder(); foreach (Excel.Worksheet sht in Globals.ThisWorkbook.Worksheets) { sb.Append(sht.Name); sb.Append("\n")... 阅读全文
posted @ 2010-03-18 21:44 RobinLao 阅读(938) 评论(0) 推荐(0)
摘要:可能有人会问,除了ThisWorkbook_SheetActivate事件,为什么还要加上一个ThisWorkbook_ActivateEvent事件?这是因为,打开表的时候,当前表并不会激发ThisWorkbook_SheetActivate事件,所以还需要加上工作簿的激活事件。 阅读全文
posted @ 2010-03-18 21:36 RobinLao 阅读(1667) 评论(1) 推荐(1)
摘要:9.1(2) ------ 9.119(3).5(1) ----- 999.589(2).7 ------ 899.7即把括号替换成括号前一数字的N次原帖见http://topic.csdn.net/u/20100317/19/e25694b8-ff80-427a-910b-04a666ce6cbc.html 阅读全文
posted @ 2010-03-17 23:27 RobinLao 阅读(1091) 评论(0) 推荐(0)
摘要:private void ThisWorkbook_Startup(object sender, System.EventArgs e) { string sCode = "Sub VBAMacro()\r\n" + "MsgBox \"Test\"\r\n" + "End Sub"; VBComponent oModule; oModule = Globals.ThisWorkbook.VBPr... 阅读全文
posted @ 2010-03-16 13:57 RobinLao 阅读(1260) 评论(0) 推荐(0)
摘要:注意:1、这个事件是工作簿的事件,所以需要写在thisworkbook里   2、捕捉的是工作簿的缩放,而不是EXCEL程序的缩放 阅读全文
posted @ 2010-03-15 15:53 RobinLao 阅读(798) 评论(0) 推荐(0)
摘要:VS2005版的C#没有提供和VB.NET一样的RESIZE方法,所以经常看到很多用C#的同学在数组填充单元格的时候是通过定义一个Excel.Range再赋值Value2的方法来做的,其实VS2008中提供了一个get_Resize方法,无需那么麻烦了。 阅读全文
posted @ 2010-03-10 23:55 RobinLao 阅读(2021) 评论(0) 推荐(0)
摘要:private void button1_Click(object sender, EventArgs e){ StringBuilder sb = new StringBuilder(); for (int i = 1; i < this.Application.RecentFiles.Count; i++) { sb.Append(this.Application.RecentFiles... 阅读全文
posted @ 2010-03-07 23:27 RobinLao 阅读(542) 评论(0) 推荐(0)