摘要: 大家都知道,C#里没有直接的方法能转置一个数组,所以一般都用循环来完成。为此我上次专门在CSDN上发了个贴,询问VSTO里用C#有没有办法可以不用循环来转置数组,但没得到结果,为此我还抱怨了微软好久,C#的功能竟然还不及VBA。今天,突然闪过一个念头,VBA里可以调用EXCEL的工作表函数,那VSTO里是否也可以呢?试了一下,原来真可以,郁闷了,以前转了那么多弯路。测试代码如下:private v... 阅读全文
posted @ 2010-04-23 20:46 RobinLao 阅读(849) 评论(0) 推荐(0) 编辑
摘要: 以前,连接文本用的是"CONCATENATE"函数或者“&”,不过在有许多单元格时候一个个点很麻烦,所以一般都我是自编一个VBA循环来连接。前些天,看到论坛上某人发现了一个函数的新用法,“PHONETIC”函数可以快速的连接,只需=PHONETIC(A1:C10)就可连接这个区域的所有文本数据,极大的省略了繁琐的步骤。不过可惜的是,这个函数不... 阅读全文
posted @ 2010-04-16 23:44 RobinLao 阅读(1173) 评论(0) 推荐(0) 编辑
摘要: 今天碰到了个问题,发现无法使用某些对象事件,+=后双TAB出不来。四处找原因,GOOGLE、MSDN上翻了许久,终于找到了原因和解决方法。原因:写了一个同名的方法,而VSTO处理规则应该是方法>事件,所以有了同名的方法后事件就无法使用了。如已经写了下面的方法:如果再写Globals.ThisWorkbook.ActivateEvent+=,双TAB后会报以下提示:此类中已存在处理程序&rdq... 阅读全文
posted @ 2010-04-14 23:52 RobinLao 阅读(507) 评论(0) 推荐(0) 编辑
摘要: 为了测试代码的通用性,我装了2003和2007的双Office,但今天却碰到了个问题,在VS2008下开发了一个EXCEL2003加载宏,保存后再次打开后会弹出转换向导。不当心点了个"完成",结果就郁闷了,只能重写。MS的VSTO论坛上查了一下,还真找到了解决方法,原来只要把工具>选项>Office工具>项目升级里的“始终升级到已安装版本Office”取消... 阅读全文
posted @ 2010-04-01 22:43 RobinLao 阅读(588) 评论(0) 推荐(0) 编辑
摘要: 今天某论坛上看到有人问VBA里的Msgbox在C#里怎么没有了。刚学C#那会,我也迷惑了一阵,后来MSDN上一查,原来Msgbox在C#里改名字了:Messagebox.Show 。小知识,希望对从VBA到C#的初学者有用。 阅读全文
posted @ 2010-04-01 21:41 RobinLao 阅读(464) 评论(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 阅读(592) 评论(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 阅读(869) 评论(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 阅读(923) 评论(0) 推荐(0) 编辑
摘要: 可能有人会问,除了ThisWorkbook_SheetActivate事件,为什么还要加上一个ThisWorkbook_ActivateEvent事件?这是因为,打开表的时候,当前表并不会激发ThisWorkbook_SheetActivate事件,所以还需要加上工作簿的激活事件。 阅读全文
posted @ 2010-03-18 21:36 RobinLao 阅读(1643) 评论(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 阅读(1085) 评论(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 阅读(1216) 评论(0) 推荐(0) 编辑
摘要: 注意:1、这个事件是工作簿的事件,所以需要写在thisworkbook里   2、捕捉的是工作簿的缩放,而不是EXCEL程序的缩放 阅读全文
posted @ 2010-03-15 15:53 RobinLao 阅读(791) 评论(0) 推荐(0) 编辑
摘要: "^\d+$"  //非负整数(正整数 + 0)"^[0-9]*[1-9][0-9]*$"  //正整数"^((-\d+)|(0+))$"  //非正整数(负整数 + 0)"^-[0-9]*[1-9][0-9]*$"  //负整数"^-?\d+$"    //整数"^\d+(\.\d+)?$"  //非负浮点数(正浮点数 + 0)"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0... 阅读全文
posted @ 2010-03-13 23:42 RobinLao 阅读(8402) 评论(0) 推荐(0) 编辑
摘要: 首先需引用你所用的OUTLOOK版本的库(2003为11.0,2007 12.0,2010 14.0) 阅读全文
posted @ 2010-03-11 23:56 RobinLao 阅读(853) 评论(0) 推荐(0) 编辑
摘要: VS2005版的C#没有提供和VB.NET一样的RESIZE方法,所以经常看到很多用C#的同学在数组填充单元格的时候是通过定义一个Excel.Range再赋值Value2的方法来做的,其实VS2008中提供了一个get_Resize方法,无需那么麻烦了。 阅读全文
posted @ 2010-03-10 23:55 RobinLao 阅读(2000) 评论(0) 推荐(0) 编辑
摘要: EH上看到有人问这个问题,其实只需要一句代码就行立即框输入以下代码后回车 阅读全文
posted @ 2010-03-09 12:24 RobinLao 阅读(2498) 评论(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 阅读(539) 评论(0) 推荐(0) 编辑
摘要: Private Sub Workbook_Open() Application.OnKey "^{c}", ""End SubPrivate Sub Workbook_Deactivate() Application.OnKey "^{c}"End Sub 阅读全文
posted @ 2010-03-06 23:39 RobinLao 阅读(929) 评论(0) 推荐(0) 编辑
摘要: 代码说明:在123456789或987654321中插入+-*/四则符号来算出一个固定的值。asc为true时是123456789,反之为987654321。123456789算100,C#下时间为15秒,VBA下为56秒,快了3/4。版权说明:本文来自狼版http://blog.csdn.net/northwolves/archive/2009/11/20/4841068.aspx一文,试着用C... 阅读全文
posted @ 2010-03-05 13:43 RobinLao 阅读(954) 评论(0) 推荐(0) 编辑
摘要: C#里只需要这么一句话,而VBA环境里试了好几个方法,包括VBA本身功能、API、SHELL、注册表等,却都是只能取到本地机器名,无法取到公司里的域名。 阅读全文
posted @ 2010-03-04 22:49 RobinLao 阅读(695) 评论(1) 推荐(0) 编辑