第 21页 /总 38页 第23章 365个常见问题答疑
可以终止Excel进程吗?
答:可使用DOS命令taskkill:
shell \
其中参数 /f表示强制结束进程,不弹出对话框。
问题195:
【录制宏】按钮呈灰色禁用状态,其它按钮都正常,怎么回事?
答:某个SUB过程正处于调试状态。单击工具栏的【重新设置】按钮即可。 问题196:
录制宏时提示“不能记录”怎么回事?
答:模块中存在不完整的代码,例如只有“End sub”没有“SUB”语句。 问题197:
可以暂时禁用鼠标操作和利用键盘在单元格录入任意字符吗? 答:
Application.Interactive = False '修改为True则可以还原 问题198:
可以让单元格的值按显示的值参与计算吗? 答:
ActiveWorkbook.PrecisionAsDisplayed = True
此状态下,单元格的值1.5可能会当作2处理。
问题199:
如何获取当前操作系统的版本?例如XP、VISTA、WIN 7。 答:
MsgBox
CreateObject(\ws NT\\CurrentVersion\
问题200:
用什么方法获取控件的属性值? 答:CallByName,不过它不可以直接判断控件是否具有某属性,需要配合防错语句使用,根据err.number值来判断结果。
CallByName函数除了能获取对象的属性值外,也能执行一些命令,例如移动对象。以下代码用于将窗体中的标签向下移20,向右移30:
CallByName Me.Label1, \问题201:
如何禁止使用右键中的【删除】菜单?
答:将该子菜单的Enabled属性设置为False即可,代码如下:
Application.CommandBars(\删除(&D)...\问题202:
如何让宏自动运行?
答:自动运行分很多种,所有事件都可以自动运行。不过,狭义地讲,自动运行是指名为Auto_open或者Workbook_Open的事件过程。所以代码放入Open事件或者将宏的名称命名为Auto_Open即可。过程Auto_Open的代码要放在模块中才行。
问题203:
VBA中\\和/两个运算符有什么分别?
答:\\表示整除运算,计算结果不带小数;/表示除法运算,结果可能包含小数。
第 22页 /总 38页 第23章 365个常见问题答疑
问题204:
单元格不能使用填充功能,如何修复?
答:将CellDragAndDrop属性赋值为True即可,代码如下:
Application.CellDragAndDrop = True 问题205:
符号“+”在VBA中是表示加法算法吗?
答:不一定,当对数字使用+时表示加法,对文本采用+则表示连接。例如:\问题206:
True参与运算时表示1,False参与运算时表示0吗? 答:在VBA中,True按-1参与运算。
问题207:
Range.Select和Range.Activate有什么分别?
答:Range.Select命令表示选择一个对象或区域,Range.Activate命令表示激活一个对象或者单元格。可以同时Select多个对象,但只能Activate一个对象。
问题208:
可以不显示最近打开的文件列表吗?
答:将DisplayRecentFiles属性设置为False即可,代码如下:
Application.DisplayRecentFiles = False 问题209:
可以知道本机中有哪些磁盘吗?
答:需要使用FSO技术,遍历所有Drive对象,代码如下:
Sub test()
Dim drive As Object
For Each drive In CreateObject(\ MsgBox drive.DriveLetter Next End Sub
问题210:
如何让工作表的单元格根据字符数量自动调整为最合适的行高? 答:使用Range. AutoFit方法妈可,代码如下:
Cells.EntireRow.AutoFit 问题211:
可以通过变量的循环执行一系列SUB过程吗?例如宏1、宏2、宏3。 答:需使用Application.Run方法
Sub test()
For i = 1 To 3
Application.Run \宏\ Next End Sub
问题212:
如何判断是否添加了scrrun.dll文件的引用?
答:获取名为“Scripting”的引用对象对称,获取失败表示没有添加scrrun.dll文件的引用。
Sub test()
On Error Resume Next
a = ThisWorkbook.VBProject.References(\
第 23页 /总 38页 第23章 365个常见问题答疑
If Err.Number = 0 Then MsgBox \已添加引用\未添加引用\End Sub
问题213:
如何计算工作簿中的窗体、模块、类模块的总数量? 答:
MsgBox ThisWorkbook.VBProject.VBComponents.Count - Sheets.Count - 1
其中“-1”表示减去Thisworkbook对象自身,否则会多计算一个。 问题214:
“编译错误:找不到工程或库”是什么意思? 答:未正确添加引用。
问题215:
可以使用工作表打印时上下、左右居中吗?
答:CenterHorizontally和CenterVertically控制着居中方式
ActiveSheet.PageSetup.CenterHorizontally = True ActiveSheet.PageSetup.CenterVertically = True
问题216:
Msgbox 的第二参数64代表什么意思? 答:
第二参数用于指定对话框的按钮和图标,64代表Information Message图标,即一个叹号 。可以用16、32、24分别测试其它图标效果。
问题217:
Sheets和Worksheets有什么分别?
答:前者代表所有表,后者仅代表工作表。表包括工作表和图表、宏表和5.0对话框。 问题218:
为什么使用自定义函数时,没有自动更新计算结果?
答:使用Application.Volatile语句将函数标示为易失性函数即可。 问题219:
如何取消显示的分页符? 答:
ActiveSheet.DisplayPageBreaks = False 问题220:
宏的安全性设置为低时,可以做到打开工作簿而不启用宏吗?
答:打开Excel的状态下,按住Shift键再单击“打开”按钮打开工作簿。 问题221:
如何判断变量的类型? 答:使用Typename函数。
问题222:
VBA中[]括号在配合运算表达式使用时有什么用?
答:类似于Evaluate方法,可以将转换或者计算表达式。不过[]中的文本不需要用引号,Evaluate的参数需使用引号。
问题223:
可以一次插入30个工作表吗?
答:对Sheets.Add 方法的Count参数赋值为30即可:
第 24页 /总 38页 第23章 365个常见问题答疑
Sheets.Add Sheets(Sheets.Count), , 30 问题224:
对普通变量赋值和对对象变量赋值有什么分别?
答:对象变量需要用Set进行赋值,否则会出错;对普通变量赋值可用let,也可以忽略,直接通过等号赋值即可。
set 工作表变量=sheets(1) '对象变量赋值 let 普通变量=123 '普通变量赋值
问题225:
变量的作用域如何理解?
答:作用域指变量的可用范围。例如变量可以在本模块中使用,而另一个模块中不可以调用;再如变量只能在本过程中调用,其它过程不能调用。
问题226:
变量有生存周期吗?
答:变量生存周期指变量的可调用的时间范围。当释放变量后就不可能调用。可以手工释放,也可以自动释放。有些变量是过程结束时自动释放变量,有些是工作簿关闭时才释放变量。
问题227:
如何让工作表区域全屏显示?
答:Application.DisplayFullScreen属性赋值为True即可:
Application.DisplayFullScreen = True
问题228:
如何将区域转换成图片放入剪贴板供程序调用? 答:使用Range.CopyPicture方法:
Range(\问题229:
ActiveWorkbook与ThisWorkbook有什么区别?
答:前者为活动工作簿,后者为代码所在工作簿,两者有时表示同一个工作簿,有时表示不同工作簿。
问题230:
如何判断工作表是否处于保护状态? 答:
msgbox ActiveSheet.ProtectContents
如果返回TRUE则表示处于保护状态,否则未保护。
问题231:
为什么使用“Cells.Find(What:=\”查找包括A的单元格时有时成功有时不成功?
答:使用Find时需要将LookIn和LookAt两个参数都写全,否则就可能不成功,因为Find有记忆功能,会受上一次的设置所影响。
问题232:
为什么“Range(\”运行有时出错有时可用?
答:Exce 2010在兼容模式下不可以使用,为了让代码通用,可以改用“cells(rows.count,1)”。
问题233:
如何获取两个区域的合集?
第 25页 /总 38页 第23章 365个常见问题答疑
答:使用Union方法,例如:
Union([a1], [g2:h20]) 问题234:如何获取两个区域的交集? 答:
Intersect([a1:g4], [g2:h20])
如果参数与参数之间不存在交集,那么Intersect返回Nothing。
问题235:
Auto_Open过程与Workbook_Open事件过程有什么区别?
答:两者功能一样,但两者同时出现时,Workbook_Open事件先运行,Auto_Open过程后运行;Workbook_Open事件需要放在Thisworkbook代码窗口中才运行,Auto_Open放于模块中。
问题236:
为什么工作簿保存后再打开代码就不见了?
答:需要使用xlsm格式或者xls格式,保存为xlsx格式时文件中的VBA代码将自动消失。
问题237:
录制宏有哪些限制?
答:Excel的部分操作可以录制,部分操作不能录制;条件语句、循环语句、事件、窗本等等都不能通过录制宏产生。但是录制宏对于编程仍然极其重要。
问题238:
可以取消双击受保护的工作表时弹出的警告对话框吗? 答:在BeforeDoubleClick事件中写入以下代码:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Locked Then Cancel = True End Sub
问题239:
如何设置每3分钟自动保存? 答:
Application.AutoRecover.Time = 3 问题240:
循环语句中的Step有什么用?
答:它表示步长值,正向循环且步长为1时可以忽略,其它一切情况都必须指定Step参数。例如“for i=100 to 1 Step -1”中的step就是必选项。
问题241:
Show 1和Show 0有什么分别?
答:Show的参数表示窗体显示为有模式还是无模式,通俗的讲就是窗体显示后能不能再操作单元格。此属性对Excel 2000及以前的版本无效。
问题242:
Debug.Print是什么意思?
答:用于调试代码,可在“立即”窗口输出文本,例如“Debug.Print i”表示输出变量i的值。
问题243:
使用正则表达式需要添加哪一个文件的引用? 答:vbscript.dll