第 5页 /总 38页 第23章 365个常见问题答疑
问题42:
VBA可以打开资管源管理器中的文件夹吗? 答:
Shell \
其中参数vbMaximizedFocus表示打开文件夹后窗口最大化。 问题43:
如何删除选区中的所有空格? 答:
Selection.Replace What:=\
注意LookAt参数要赋值为xlPart,表示部分匹配。
问题44:
VBA可以读写注册表中任意键值吗? 答:VBA自带的Getsetting和Savesetting只能读写指定路径的键值,但VBA调用脚本语言来读写注册表就可以操作任意键值。
问题45:
ontime如何调用具有参数的过程?例如
Sub a(b) MsgBox b End Sub
答:将过程名与参数一起作为OnTime的参数,过程的参数要加引号,代码如下:
Application.OnTime Now + TimeValue(\你好\
问题46:
可以禁止用户插入新表吗?
答:保护工作簿可以实现,在Workbook_NewSheet事件中自动删除工作表也可以实现。 问题47:
如何中途阻止运行过程?
答:使用快捷键 【Ctrl+Break】或者按住【ESC】键不松开。 问题48:
可以屏弊内置的快捷键吗?
答:用OnKey即可,例如禁用【Ctrl+c】用以下代码:
Application.OnKey \问题49:
Range.text与Range.value有何区别?
答:前者表示单元格显示的文本,后者为单元格中真正的值,自定义数字格式后两者会有较大分别。
问题50:
如何一键删除工作表中所有图形对象? 答:
ActiveSheet.DrawingObjects.Delete
此代码可以录制宏产生。
问题51:
VBA可以修改系统日期吗?
答:直接对Date赋值即可,代码如下:
Date = \
第 6页 /总 38页 第23章 365个常见问题答疑
问题52:
如何将工作簿另存到D盘中,且工作簿名由A1单元格的值决定。 答:使用Workbook.SaveAs方法。
ActiveWorkbook.SaveAs \问题53:
如何禁用单元格右键菜单?
答:将Cancel 参数赋值为True即可。
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) Cancel = True
End Sub
问题54:
可以禁止双击修改单元格吗?
答:将Cancel 参数赋值为True即可。
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) Cancel = True End Sub
问题55:
如何一次性清除工作表中所有公式结果为错误值的单元格? 答:
On Error Resume Next
Cells.SpecialCells(xlCellTypeFormulas, 16) = \
问题56:
Evaluate方法可以将任意表达式进行转换计算吗? 答:不行,它有参数长度不超过256的限制。
问题57:
可以为自定义函数添加每一个参数的说明吗?
中:Excel 2010可以,通过MacroOptions的最后一个参数实现。Excel 2003和2007的MacroOptions只能添加函数说明,不能对参数添加说明。
问题58:
如何生成包括第X页 共Y页的页眉?
答:在PageSetup对象中使用“第&P页 共&N页”即可,P代表当前页,N代码总数。 ActiveSheet.PageSetup.LeftHeader = \第&P页 共&N页\问题59:
如何判断当前工作表处于筛选状态? 答:
MsgBox ActiveSheet.FilterMode
如果结果为True则表示处于筛选状态。
问题60:
可以用一句代码实现合并A1:A10的值吗?
答:Join能将数组的值合并成一个字符串,但不支持区域作参数,所以使用工作表函数Transpose将参数转换成数组后再配合Join即可实现: MsgBox Join(WorksheetFunction.Transpose([a1:a10]), \问题61:
第 7页 /总 38页 第23章 365个常见问题答疑
如何一键删除超链接? 答:
ActiveSheet.Hyperlinks.Delete
问题62:
可以用一句代码实现对二维数组变量赋值吗?
答:公式中的{}可以创建二维数组,添加[]后即可使其在VBA中使用。
Arr = [{1,2,3;4,5,6}] 问题63:
如何计算“D:\\工作”文件夹的大小?
VBA的FileLen只能计算文件大小,使用FSO对象的GetFolder才能获取文件夹的信息,代码如下:
CreateObject(\工作\问题64:
不用循环能计算1到100之间自然数之和吗? 答:直接调用数组公式即可,代码如下:
MsgBox [sum(row(1:100))] 问题65:
可以一句代码实现向下填充所有空白单元格吗? 答:
On error resume next '防止不存在空白单元格时出错
ActiveSheet.UsedRange.SpecialCells(xlCellTypeBlanks).FormulaR1C1 = \
问题66:
什么是溢出错误?
答:对变量赋值时,值大于它的有效范围,例如对Byte型的变量赋值300。
问题67:
下标越界是什么意思?
答:参数值超过了参数的上下限。例如工作表数量为3时,用代码访问第4个工作表,或者访问的对象不存在(例如写错了工作表名称、工作簿名称、图片名称等等)。 问题68:
如何禁止合并单元格和删除工作表时弹出提示?
答:在合并单元格或者删除工作表的代码前加“Application.DisplayAlerts = False”;在其后加“Application.DisplayAlerts = True”
问题69:
如何禁止用户中断程序的运行过程? 答:
Application.EnableCancelKey = xlDisabled
问题70:
可以在较单词时不区分大小写吗? 答:在模块的顶部写入以下代码:
Option Compare Text 问题71:
可以让数组的默认下标为1吗? 答:在模块的顶部写入以下代码:
Option Base 1 第 8页 /总 38页 第23章 365个常见问题答疑
问题72:
可以用VBA打开控制面板吗? 答:
a = Shell(\
或者
CreateObject(\问题73:
如何取得“d:\\123.xlsm”的创建时间? 答:
FileDateTime只能获取文件最后一次修改的时间,获取创建时间要用FSO对象的DateCreated属性实现。 MsgBox CreateObject(\问题74:
动态变量和静态变量的区别何在?
答:动态变量在结束过程时会释放变量值,静态变量在关闭工作簿时或者使用End时才释放变量值。
问题75:
如何防止程序因出错而弹出错误对话框? 答:使用防错语句:
On error resume next 问题76:
批量删除或者插入行时,如何防止屏幕闪动? 答:使用“Application.ScreenUpdating = False” 但在程序结束时需要恢复此设置。
问题77:
运行窗体时可以只显示窗体,看不到Excel界面吗? 答:在运行窗体前加入以下代码:
Application.Visible = False
再将“Application.Visible = True”代码放在窗体的关闭事件中,使Excel界面还原为显示状态。
问题78:
如果隐藏所有批注,红色箭头也能一起隐藏吗? 答:
Application.DisplayCommentIndicator = xlNoIndicator 问题79:
在对话框中录入字符串时,可以显示为星号吗?
答:使用窗体中的文字框时可以。将其PasswordChar属性设置为True即可,inputbox对话框不可以,除非调用API函数产生一个inputbox类似的对话框。
问题80:
如何取得Excel的安装路径? 答:
MsgBox Application.Path 问题81:
如何打开Windows自带的计算器?

