第 11页 /总 38页 第23章 365个常见问题答疑
MsgBox ActiveCell.Text = ActiveCell.Value 问题101:
如何判断活动单元格是否存在条件格式?
答:计算FormatConditions的数量,大于0则表示有条件格式,代码如下:
MsgBox ActiveCell.FormatConditions.Count > 0 问题102:
如何用一句代码删除A列的重复值? 答:
Columns(\
问题103:
可以使自己的SUB过程不出现在宏对话框中吗? 答:通过Private将过程声明为私有过程即可。 问题104:
如何计算活动工作表能打印多少页? 答:
ActiveWindow.View = xlPageBreakPreview
MsgBox ExecuteExcel4Macro(\
问题105:
可以每次打印前将已用区域更新为打印区域吗?
答:将已用区域的地址赋值给PrintArea即可,代码如下:
ActiveSheet.PageSetup.PrintArea = ActiveSheet.UsedRange.Address 问题106:
名称也分作用域吗?
答:定义的名称包括工作表级和工作簿级。工作表级名称的名字中会带有工作表名称,属于私有名称;而工作簿级名称为公有名称,通过Activeworkbook.Names调用即可。 问题107:
为什么代码前面有的空几格,有些不空?是必须的吗?有何规则?
答:在一行代码前添加空格是为了美观,以及便于查看代码的结构。这不是必须的,但可增加方便性。通常由各语句的层级结构决定缩进几个空格。
问题108:
能否多句代码写在一行中? 答:可以,利用冒号分隔即可。
问题109:
多句代码写在一行和写在多行是否在执行过程中没有任何分别?
答:大多数时间没有分别,但在某些条件语句下两种写法会有所差异,本书中有介绍。 问题110:
一句较长的代码如何分多行书写?
答:在需要断开的地方添加“ _”即可,注意第一个字符是空格。
不能将一个单词拆开,例如把“Range”5个字母写在两行中会导致代码执行出错。 问题111:
有些代码中有“VBA.”,这是什么意思?必须的吗?
答:编写代码时,使用“VBA.”是为了调用VBA内部的属性、方法或者函数,便于从中选择需要的单词。
第 12页 /总 38页 第23章 365个常见问题答疑
这不是必要的,但会增加便利性。
问题112:
某些代码前有一个撇号,那代表什么?
答:表示将代码转换成注释,注释是不执行的,可以在任何需要的时候将它还原成可执行的代码,删除撇号即可。
也可以使用Rem代替撇号。
问题113:
VBA如何调用DOS命令? 答:
Shell Environ$(\您的代码 & \
例如:
Shell Environ$(\
以上代码表示用DOS命令新建一个文件夹12345,位于D盘。 问题114:
用代码删除文件是否不经过回收站?
答:VBA中的Kill和DOS下的delete删除文件都不经过回收站。 不过如果调用API函数是可以让它从回收站还原的。 问题115:
如何在指定的行插入一个分页符? 答:
ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=Range(\问题116:
常量既然在程序运行中不产生变化,为什么不直接使用值本身而要用常量呢?
答:使用常量可以简化输入,而且如果需要修改值时,仅需对常量的赋值作修改即可,不需要逐一修改所有代码中出现的值。
问题117:
为什么部分函数无法通过worksheetfunction调用?
答:通常是因为VBA有内置的具有相同功能的函数可以替代,这种情况下用VBA的函数即可。
问题118:
可以在活动单元格的批注中插入一行,显示当前日期吗? 答:使用以下代码即可,不要要确保单元格已经有批注。
ActiveCell.Comment.Text Text:=ActiveCell.Comment.Text & Date 问题119:
如何判断一个图片是否在D1单元格之上? 答:
MsgBox Not Intersect(Range(Sheet1.Shapes(1).TopLeftCell, Sheet1.Shapes(1).BottomRightCell), [d1]) Is Nothing
问题120:
“信任对VBA工程对象模型的访问”复选框项有何用?
答:通过它可以控制VBA代码对VBE工程的访问权限,在未勾选的状态下,所有VBE相关的代码都禁止执行。例如:
MsgBox Application.VBE.Version
只有勾选“信任对VBA工程对象模型的访问”后才能执行以下代码。
第 13页 /总 38页 第23章 365个常见问题答疑
问题121:
如何计算带有“[备注]”的表达式?例如“1200*8[8台诺基亚手机]+3400*5[iphone4]”。 答:将[替换成“*ISTEXT(\”,将]替换成“]\”,然后使用Evaluate计算即可。
MsgBox Evaluate(Replace(Replace(\台诺基亚手机]+3400*5[iphone4]\\
问题122:
如何获取某个盘符的序列号?例如C盘。 答:
CreateObject(\问题123:
如何获取硬盘的物理序列号? 答:
MsgBox
GetObject(\ICALDRIVE0\
问题124:
VBA中的IIF和IF...Then...Else有何分别?
答:IIF是函数,用于返回值;IF...Then...Else是条件语句,可以在指定条件下执行任何语句,比IIF更强大,不能返回值。
问题125:
IIF是否和工作表函数IF用法一致?
答:语法基础相同,但是IIF有一个BUG:不管第一参数是否为True,它都会计算第二和第三参数。当条件为True但第三参数是错误值时,IIF语句也会出错。
问题126:
单元格右键菜单被禁用时如何恢复? 答:执行以下两句代码即可:
Application.CommandBars(\Application.CommandBars(\
问题127:
有什么方法或者属性、函数能检查是否存在某个名称的工作表?
答:没有现成的,可以自己定义一个函数实现。在函数中引用该名称的工作表,然看判断代码是否出错,如果引用出错则表示不存在。
问题128:
如何将一个区域的公式转换成值? 答:
Range(\问题129:
批注框的大小可以调整为自动适应文字的多少吗? 答: ActiveCell.Comment.Shape.TextFrame.AutoSize = True 问题130:
如何一次性将工作表中所有公式所在单元格标示为黄色? 答:
On error resume next '避免无公式时代码出错
cells.SpecialCells(xlCellTypeFormulas, 23).Interior.Color = 65535
第 14页 /总 38页 第23章 365个常见问题答疑
问题131:
如何启动发送邮件的窗口?且向指定用户名发送。 答:
ActiveWorkbook.FollowHyperlink \问题132:
如何禁用窗体右上角的关闭按钮?
答:在窗体的QueryClose事件中写入以下代码:
If CloseMode <> 1 Then Cancel = True 问题133:
如何开启指定文件夹? 答:
ActiveWorkbook.FollowHyperlink Address:=\生产表\
或者:
shell \生产表\问题134:
Alt+F11快捷键被禁用了,如何修复? 答:
Application.OnKey \问题135:
可以把本工作簿的关闭时间写入注册表吗? 答:
SaveSetting方法能将任意文本存入注册表。 SaveSetting \关闭时间\问题136:
如何删除“D:\\生产表”? 答:
CreateObject(\生产表\
问题137:
如何调用屏保锁定屏幕? 答:
Shell Environ(\问题138:
可以实现暂停0.5秒钟吗? 答:
Private Declare Sub Sleep Lib \Sleep 500 '500代表0.5秒钟
问题139:
可以一键删除所有“0”所在行吗? 答:将0值替换成计算结果为错误值的公式,然后定位错误公式并整行删除。代码如下:
On error resume next '避免无0值时代码出错
Cells.Replace What:=\Cells.SpecialCells(xlCellTypeConstants, 16).EntireRow.Delete
问题140:
如何实现用一句代码将Sheet1的所有数据复制到“总表”中? 答:
第 15页 /总 38页 第23章 365个常见问题答疑
Sheet1.UsedRange.Copy Sheets(\总表\问题141:
如何实现将活动单元格最后一个字符设置为上标? 答:需要用到Characters,代码如下:
ActiveCell.Characters(Start:=Len(ActiveCell.Value), Length:=1).Font.Superscript = True 问题142:
可以实现锁定所有公式所在单元格从而防止误修改吗? 答:
Sub test()
Cells.Locked = True '锁定所有单元格
Cells.SpecialCells(xlCellTypeConstants, 23).Locked = False '将公式以外的非空单元格取消锁定 ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True '保护工作表 End Sub
问题143:
如何取消工作表中所有单元格的隐藏属性? 答:
Cells.EntireColumn.Hidden = False '显示所有列 Cells.EntireRow.Hidden = False '显示所有行
问题144:
如何实现隐藏所有零值? 答:
ActiveWindow.DisplayZeros = False 问题145:
窗体中有两个文本框,能实现文本框中录入数据后敲回车键时执行命令,而不是通过单击按钮来执行命令吗?
答:将需要执行的命令写入TextBox1_Exit事件中即可。
TextBox1_Exit事件表示一个控件即将把焦点转移到另一个控件时触发的事件,当在第一个文字框中按下回车键时会自动转移焦点到另一个文字框。
问题146:
窗体可以永远显示最上层吗?
答:VBA无法做到,窗体本身没有这个属性。不过VBA调用API函数是可以实现的。 问题147:
如何删除d盘中所有Excel文件? 答:
Shell Environ$(\
请小心测试,使用新工作簿或不重要的表格测试代码。
如果需要将子目录中的工作簿一起删除可以对del命令加一个参数“-s” 问题148:
如何实现在状态栏显示动态时间?要求时间可以实时更新。 答:
sub auto_open()
Application.StatusBar = \现在时刻: \
Application.OnTime Now + TimeValue(\end sub
问题149: