第 26页 /总 38页 第23章 365个常见问题答疑
问题244:
VBA中可用的正则表达式和其它软件中使用的正则表达式一样吗? 答:大同小异,有些语法是不通用的。例如VBA不支持反向预查。 问题245:
正则表达式中条件“A[BCD]E”支持哪些匹配? 答:ABE、ACE和ADE
问题246:
正则表达式中,匹配条件“\\D”是代表字母D吗?
答:表示单个数字以外的字符。例如单个汉字、单个标点符号或者单个字母。 问题247:
正则表达式中的“*”、“?”两个元字符和DOS中的两个同名通配符功能一样吗?
答:原理相近,但功能大大不同,正则表达式中的元字符比DOS中的通配符更强大。 问题248:
VBA中的replace和工作表函数replace功能一样吗?
答:都是替换函数,但替换方式大大不同。VBA中的replace和工作表函数SUBSTITUTE的功能更接近。
问题249:
VBA代码也区分32位和64位吗? 答:要区分的,在32位和64位的Excel中, VBA代码并不通用,特别是API函数部分。 问题250:
VBA可以开发商用的软件吗?
答:仅用VBA编程不行,安全性不够。但是可以VBA配合其它软件实现,生成可注册的加密型安装软件。
问题251:
在一列中取唯一值的方法很多,用什么方法通用性最好,且速度也快? 答:高级筛选中的“选择不重复的记录”。
字典和集合通用性不够,RemoveDuplicates方法的通用性更差。 问题252:
用VBA可以调用功能区中的任何功能按钮吗? 答:可以,但是VBA无法创建功能区按钮。
问题253:
利用OfficeCustomUIEdito开发功能区选项卡时,所有代码都区分大小写吗?
答:引用内置控件名称、ID,以及所有参数名称需要区分大小写,对label和onAction赋值时可以不区分大小写。
问题254:
自定义的功能区选项卡的作用对象是怎样的? 答:普通工作簿中定义的选项卡只对本工作簿有效,如果保存为加载宏则对所有工作簿都生效。
问题255:
可以暂时关闭定制的功能区选项卡吗?
答:没有可隐藏定制的选项卡的VBA代码,唯一方法是关闭该工作簿。 问题256:
第 27页 /总 38页 第23章 365个常见问题答疑
如何取得内置选项卡中的按钮的ID?
答:进入“Excel选项”对话框的“自定义功能区”选项卡中,鼠标指向按钮即可看到提示。
问题257:
可以用VBA修改自定义功能区中的按钮的图标吗?
答:可以,但要配合xml代码中的回调函数才可以。对于未使用回调函数的按钮,VBA无法控制它。
问题258:
可以用自己的照片作为功能区按钮的图标吗? 答:可以,而且图片的大小可以自定义。
问题259:
用VB能封装带有创建功能区菜单的VBA代码吗?
答:可以,不过在VB中写代码和使用OfficeCustomUIEditor向工作簿中写入代码的思路大大不同。
问题260:
通过OfficeCustomUIEditor能定制哪些项目?
答:Office文件菜单、快速访问工具栏和功能区。而右键菜单和迷你菜单、状态栏菜单,工作表标签右键菜单等无法定制。
问题261:
可以定制随选区不同而自动变化的功能区下拉菜单或者按钮吗?
答:功能区支持动态菜单dynamicMenu,可以实现实时变化的菜单和按钮。 问题262:
利用OfficeCustomUIEdito定制快速访问工具栏时能保留选项卡吗? 答:不能,但可以手工定制快速访问工具栏时保留选项卡。
问题263:
能否删除OFFICE文件菜单?
答:可以增加、删除菜单,隐藏其所有子菜单,但不能删除整个文件菜单。 问题264:
内置的对话框启动器中可以带图片显示,XML语言定制的新启动器也可以实现吗? 答:不可以。
问题265:
定制功能区选项卡时,对组、按钮或者下拉菜单的ID赋值时有什么要求? 答:不能采用纯数字、不能重复、不能带有标点符号。
问题266:
可以将工作表中插入的图片作为菜单图片吗?
答:早期的CommandBars对象是可以,Ribbon中的子元素则不可以。
问题267:
如何将录制的宏通过工作表中的按钮来执行?
答:单击功能区【开发工具】→【插入】→【按钮(窗体控件)】,然后在工作表中拖放产生一个按钮,此时会弹出“指定宏”的对话框,单击“录制”即可。
问题268:
使用一个带有创建自定义菜单栏的工作簿后,菜单中总有那个定义的按钮,如何删除?
第 28页 /总 38页 第23章 365个常见问题答疑
答:可以通过右键手工清除,也可以通过修改代码实现,即创建按钮时将Temporary参数设置为True,表示此按钮为临时按钮。
问题269:
代码提速通常从哪些方面着手?
答:关闭屏幕更新、尽量不使用Select方法、用数组替代区域读写操作、暂时禁用自动计算、使用With减少对象读取次数等等,实际工作中由当时的具体操作而定。
问题270:
封装代码时只能封装成DLL格式吗?
答:有OCX、DLL、EXE等等多种格式可选,不过DLL的COM加载项最常见。 问题271:
COM加载项在执行过程中如果中断了,重新启动时会再也找不到其菜单项,如何再次调用菜单?
答:进入Excel选项对话框中,在“加载项”选项卡的“管理”下拉列表中有一个“禁用项目”,将里面的项目启用即可。
问题272:
找不到【开发工具】选项卡,如何调出来?
答:在Excel选项对话框的“自定义功能区”中,将主选项卡的“开发工具”打勾即可。 问题273:
表单控件与ActiveX控件有何分别?
答:表单控件简单易用,通常单独使用;ActiveX控件使用相对复杂,但功能更强大,配合VBA代码使用。
问题274:
为什么以前使用FileSearch进行文件搜索皆正常,现在不可用了?
答:FileSearch是Excel2003的一个属性,在2007和2010中已经删除该属性,可以用DIR代替。
问题275:
为什么采用Trim函数去除空格后字符串中仍然有空格?
答:VBA中的Trim并非去除空格的函数,它仅仅去除首尾的空格而已,用replace去除空格最好。
问题276:
只想去除首尾空格,中间的完全忽略,如何写代码? 答:RTrim(LTrim(\或者Trim(\
问题277:
“Is Nothing”代表什么?
答:通常指变量未初始化,即声明变量后未对变量赋值。
也可能是对象不存在,例如使用Intersect获取两个区域的交集时,两个区域不存在交集,那么Intersect的结果将是Nothing.
问题278:
如何不用循环判断一个一维数组arr中是否包括字母“a”? 答:
Sub test()
arr = Array(1, 2, 3, 4, 5, \
MsgBox IIf(InStr(\有\没有\
第 29页 /总 38页 第23章 365个常见问题答疑
End Sub
在代码中前面添加“\”是为了防错,实现完全匹配,而非局部匹配。
问题279:
为什么两个看起来颜色不同的单元格,用Colorindex取颜色值时却结果一样?
答:在excel 2007和2010中由于颜色太多,而Colorindex只能准确表示56种颜色,所以有时会将相近的颜色返回相同值。可改用Color来获取颜色值。
问题280:
为什么Excel 2003可以通过“CommandBars(32).Controls.Add”在“分页预览”的右键中添加按钮,而在Excel 2010中不可以?
答:在Excel 2010中,分页预览的内部编号为38,和Excel 2003不同。 问题281:
加载宏用xla格式更好还是xlam格式更好?
答:如果需要插件通用性好就要采用xla格式,如果仅仅2007或者2010用户使用,则采用xlam格式,新格式可以采用功能区按钮。
问题282:
加载宏如何安装?
答:通常用快捷键【Alt+T+I】打开“加载宏”对话框,然后单击“浏览”对话框找到加载宏文件并双击即可。最简单的方式是将它复制到自动目录中。
问题283:
Excel 2003的快捷键可以用到Excel 2010中吗? 答:绝大部分可以,少部分不行。例如调用加载项【Alt+t+i】、数据透视表向导【Alt+d+p】、记录单【Alt+d+o】,但页面设置【Alt+f+u】则不通用。
问题284:
Excel 2003的状态栏右键菜单可以定制,2010的也可以吗? 答:不可以,不管用VBA还是xml语言都不能实现。 问题285:
可以做到禁用宏则退出工作簿吗?
答:Excel 2003可以做到,Excel 2010不可能。
问题286:
如何才能知道Range有哪些属性和方法?
答:在代码窗口中录入“Range.”后,会弹出常数列表;而按F2键打开对象浏览器则可以看到更详细的列表,它可以调出Range的一些隐藏参数。
问题287:
cells和Range方式引用单元格有何分别?
答:前者两个参数都可以使用数字,在循环语句中使用很方便;后者在书写时会弹出属性与方法成员列表,而且可以用于引用多区域。两者各有优势。
问题288:
为什么调用硬盘中的ICO图标作为功能区按钮的图标时会偶尔不成功? 答:可以通过OfficeCustomUIEditor软件将它插入至文件中,再调用该图标 如果调用硬盘中的图片,请用bmp或者jpg格式,不支持其它格式。
问题289:
为什么Excel 2010中通过VBA代码插入图片后,文件寄给其他人后,打开文件却看不到图片?
第 30页 /总 38页 第23章 365个常见问题答疑
答:在Excel 2010中使用Pictures.Insert方法插入的图片是链接,而非嵌入图片。在Excel 2003或者2007中Pictures.Insert方法能直接嵌入图片。不过3个版本中用Shapes.AddPicture方法插入图片都可以使图片嵌入到工作簿中,所以最好的办法是不用Pictures.Insert方法插入图片(录制宏时都自动调用Pictures.Insert方法)。 问题290:
工作簿中可以嵌入背景音乐吗?
答:可以,不过如果是MP3格式,那么操作过程将十分复杂,需要调用API实现;如果是swf的flash动画则很简单,通过ShockwaveFlashObject控件实现即可。
问题291:
工作表中的控件为何删除不掉?
答:表单控件可以单击右键,选择【删除】菜单,而对于ActiveX控件需要进入设计模式后才可以删除。
问题292:
功能区相对于传统菜单有什么优越性?
答:分类更准确,操作更快速,而且大部分功能可以实时预览,不需要执行就可以看到执行的结果,每一个按钮都有相应的快捷键,而老式菜单做不到。
问题293:
为什么同一个文件保存为xls格式和xlsm格式其大小相差很多?
答:xlsx和xlsm格式皆为压缩格式,所以文件占用的空间相对xls格式更小。 问题294:
用迅雷从网上下载xlsx或者xlsm格式的工作簿时,有时双击打开时不是Excel,而是WINRAR是怎么回事?
答:删除自动产生的后缀名“.zip”再打开即可。
问题295:
定制功能区时,可以将控件、按钮直接放在选项卡中吗? 答:不能,层级关系是固定的。选项卡→组→控件或按钮。 问题296:
能添加新的选项卡,也能添加新的上下文选项卡吗?
答:不能,只能在现有的上下文选项卡中加入新的组和按钮。
问题297:
VBA中的Date和工作表函数Date有什么异同?
答:工作表函数Date有三个参数,用于返回指定年月日的日期;VBA中的DATE不需要参数,它表示系统的当前日期。如果对Date赋值则可以修改系统日期。
问题298:
Excel中选择多个不规则区域时禁止复制和剪切,VBA可突破这个限制吗? 答:可以,使用循环语句逐个区域复制或剪切即可。
问题299:
学会VBA后,以后OFFICE升级是否需要再次学习VBA?
答:VBA的语法不会变化,不管OFFICE如何升级。不过会增加一些新的对象或者属性、事件进来。如果学好了Excel 2010的VBA,那么以后的新增知识点稍加浏览即会。
问题300:
定制功能区选项卡时先写VBA代码更好还是先定义XML代码更好?