在编辑Excel文件时经常遇到的一个问题是,我这边用得好好地,换台机器就变了个样,或者根本用不了。下面是我在日常工作中总结的一些避免这些情况的小技巧。 1.声明每一个VBA变量预先声明每个VBA的变量。对方的Excel选项也许勾选了「要求变量申明」,你没声明变量在你这里运行没问题,到对方那边就会出错。另外,预先声明变量,是一种良好的编程习惯,可防止失误。 为防止忘记声明变量,可主动勾选VBA选项中的「要求变量申明」,或者在每个VBA模块和类模块前面都写上 2.注意数据库的连接字符串在Excel表格中使用外部数据源或者VBA中操作数据库时,连接字符串有多个写法。通过ODBC连接数据库相对比较简单,但损害了Excel文件的可迁移性,因为对方电脑上很可能没有事先定义ODBC数据源。 所以,尽量使用下面第二种方法。 ' 使用DSN(ODBC)连接数据库的连接字符串,需对方机器同时配置ODBC Provider=MSDASQL;DSN=odbc_name;UID=username;PWD=password; ' 使用IP直接连接数据库的连接字符串,无需对方机器配置ODBC driver={SQL Server};server=ip;uid=username;pwd=password; 3.避免引用dll比如写一段调用Outlook发送邮件的VBA代码,我可以先引用「 dim xOutlook as New Outlook.Application 但这样做有一个缺陷。对方的Office版本可能与你的不一致,从而不存在你所引用的这个问题,从而导致一连串错误。 解决问题的办法是,尽量不直接引用dll文件,变量声明为 dim xOutlook as Object Set xOutlook = GetObject(, "Outlook.Application") 这种方法相对于直接声明 上面 4.避免引用外部文件Excel可以引用其它Excel文件里的数据。但它有一个缺陷,Excel在引用外部文件时使用绝对路径。这样假设A文件引用相同目录下的文件B,那么即使你把A、B两个文件都发给对方,对方在打开A文件时也可能出错。 避免该问题的方法就是避免引用外部文件,比如特殊复制粘贴去掉公式,或者把外部数据表复制到主文件直接引用等等。如果迫不得已使用外部文件,那只能让对方到「数据->编辑链接」一栏重设链接文件的位置。 5.注意Office版本差异Office各个版本有一些差异,功能也不完全一样。 尤其要注意的是各版本的函数不一样。比如Office 2003里就没有Office 2007的 比如AVERAGEIF, AVERAGEIFS, CUBEKPIMEMBER, CUBEMEMBER, CUBEMEMBERPROPERTY, CUBERANKEDMEMBER, CUBESET, CUBESETCOUNT, CUBEVALUE, COUNTIFS, IFERROR和SUMIFS这些函数都是从Office 2007才引入的。 当然这点也可以无视。Office 2003是应该扔到垃圾堆了。 |