第 16页 /总 38页 第23章 365个常见问题答疑
如何实现将选区的数字转换成以“万元”为单位? 答:
Selection.NumberFormatLocal = \万元\
问题150:
如何一键添加已用区域的边框? 答:
ActiveSheet.UsedRange.Borders.LineStyle = xlContinuous
其中xlContinuous表示细边框。 问题151:
如何获取工作簿最后一次的保存时间? 答:
MsgBox ActiveWorkbook.BuiltinDocumentProperties(\问题152:
如何取消所有加载宏?
答:将加载宏文件的Installed属性设置为False即可。
Sub test()
For Each A In Application.AddIns A.Installed = False Next End Sub
问题153:
可以列出工作表能用的所有字体名称吗?
答:字体位于格式工具栏ID为1728的控件中,通过循环语速句读出其子元素即可。
Sub test()
On Error Resume Next
For i = 1 To CommandBars(\ Cells(i, 1) = CommandBars(\ Next End Sub
问题154:
如何计算开机到现在用了多少分钟? 答:
Private Declare Function GetTickCount Lib \Sub 已用时间()
MsgBox \您的电脑已使用\分钟\ End sub
问题155:
如何实现关闭Excel程序但不弹出保存提示? 答:
Application.Quit
ActiveWorkbook.Close False
问题156:
VBA可以关闭计算机吗? 答:
SHELL \
其中参数0表示立即关闭,采用数字2则表示等两秒钟关闭。 问题157:
第 17页 /总 38页 第23章 365个常见问题答疑
如何取消通过Ontime创建的计划任务?
答:对OnTime的Schedule参数赋值为False即可,不过还要注意时间参数EarliestTime与设置时使用的时间保持一致。
问题158:
可以通过“Esc”键关闭窗体吗?
答:在窗体的QueryClose事件中写入以下代码:
If KeyCode = 27 Then Me.Hide 问题159:
如何让窗体显示在Excel窗口的正中间? 答:
Private Sub UserForm_Activate()
Me.Left = (Application.Width - Me.Width) / 2 Me.Top = (Application.Height - Me.Height) / 2 End Sub
问题160:
如何选择已用区域的奇数行?用两句代码实现。 答:
Cells(1, Columns.Count).Resize(ActiveSheet.UsedRange.Rows.Count) = \Columns(Columns.Count).SpecialCells(xlCellTypeFormulas, 1).EntireRow.Select
问题161:
如何判断活动工作簿是否保存?
答:通过文件的路径来判断,如果路径的长度大于1则表示已保存过了。
MsgBox Len(ActiveWorkbook.Path) > 1 问题162:
可以禁止使用U盘吗?
答:修改注册表中对应的键值即可,代码如下:
CreateObject(\
\
问题163:
如何调用内置命令?例如查找对话框。 答:利用Execute方法可以调用内置命令。 Application.CommandBars(1).Controls(2).Controls(14).Execute 问题164:
可以获取本计算机的名称吗?
答:Environ函数能获取操作系统环境变量,若参数使用COMPUTERNAME可取得计算机名称。 MsgBox Environ(\问题165:
如何创建一个颜色选择框,并返回颜色值?
答:CommonDialog控件的ShowColor方法可以显示颜色对话框,代码如下:
Sub test()
With CreateObject(\ .ShowColor MsgBox .Color End With End Sub
第 18页 /总 38页 第23章 365个常见问题答疑
问题166:
如何打开“定位条件”对话框?
答:编号为132的对话框即为定位对话框。
Application.Dialogs(132).Show 问题167:
A=10:B=10:C=10 Msgbox A=B=C
为什么以上代码得到的结果不是True? 答:“A=B=C”表达式先计算“A=B”,将结果True和C相比较,结果就是False。正确写法如下:
A = 10: B = 10: C = 10 MsgBox A = B And A = C
问题168:
VBE界面中各窗口排列混乱或者某些窗口不见了,如何恢复默认设置? 答:关闭Excel,进入注册表的以下位置:
[HKEY_CURRENT_USER\\Software\\Microsoft\\VBA\\7.0\\Common] 然后双击打开Dock,删除里面的值即可。 问题169:
能不能用VBA获取本工作簿的创建者是谁? 答:文件属性中的Author即为创建者信息。
MsgBox ThisWorkbook.BuiltinDocumentProperties.Item(\
问题170:
Excel创建新工作簿时总是包括3个工作表,可以修改为默认7个吗? 答:工作簿的SheetsInNewWorkbook属性控制默认工作表的数量。
Application.SheetsInNewWorkbook = 7 问题171:
能否在上午10点时用语音提示“开会时间到”? 答:Ontome配合Application.Speech.Speak即可。
Sub auto_open()
Application.OnTime TimeValue(\开会\End Sub Sub 开会()
Application.Speech.Speak \开会时间到\End Sub
问题172:
可以获取system32目录的路径吗? 答:用Environ函数即可。
MsgBox Environ(\问题173:
如何创建一个按Delete键无法删除的文件夹? 答:用MkDir。
MkDir \ 或者 MkDir \问题174:
工作表中所有公式都不显示计算结果,可以让它显示值而不是公式本身吗? 答:将工作簿的DisplayFormulas属性赋值为False。
第 19页 /总 38页 第23章 365个常见问题答疑
ActiveWindow.DisplayFormulas = False 问题175:
可以让Excel 2010默认保存文件为2003格式吗? 答:保存时将格式设置为xlExcel8。
Application.DefaultSaveFormat = xlExcel8 问题176:
可以取得D盘的剩余空间吗?
答:FSO对象的AvailableSpace属性表示磁盘的剩余空间,将它转换成MB即可。
MsgBox CreateObject(\\
不过以上算法获取的结果和电脑中显示的值不可能完全一致,因为电脑和硬盘厂商的计算方式稍有不同,两种处理结果只是相近而已,无法相等。
问题177:
VBA执行过程后,可以撤消吗?
答:部分操作可以,但只能撤消一步。请参考帮助中关于“OnUndo”的用法。 问题178:
可以罗列出本工作簿定义的所有名称吗? 答:用ListNames方法即可。
Sub test()
[a1].ListNames End Sub
问题179:
自定义函数时,如何为参数指定默认值?
答:采用Optional限定参数后该参数才可以指定默认值。例如:
Function A(Optional ByVal B As String = \问题180:
如何定义参数个数不确定的自定义函数?
答:使用ParamArray限制该参数,且指定这个参数的类型为Variant。
问题181:
定义函数时,使用ParamArray需要注意什么?
答:不能与ByVal、ByRef或Optional一起使用,只能用于限定函数的最后一个参数。 问题182:
在单元格中录入网址时会自动产生超链接,如果取消该功能?
答:将AutoFormatAsYouTypeReplaceHyperlinks属性设置为False即可。
Application.AutoFormatAsYouTypeReplaceHyperlinks = False 问题183:
Select方法的参数是什么意思? 答:代表是否扩展当前所选内容以包括以前选择的对象。例如以下代码可以选择两个工作表:
Sheet1.Select: Sheet2.Select False 问题184:
本机中安装有多个打印机时,如何获取默认打印机名称? 答:ActivePrinter即为默认打印机。
MsgBox Application.ActivePrinter
第 20页 /总 38页 第23章 365个常见问题答疑
问题185:
VBA能实现隐藏文件吗?
答:对文件设置隐藏属性即可。
SetAttr \我的文档\\桌面\\工作表.xls\问题186:
如何判断用户当前处于兼容模式下使用Excel? 答:
MsgBox Rows.Count = 65536 And Application.Version * 1 > 11
即版本号大于11而工作表行数为65536行。
也可以改用工作簿的Excel8CompatibilityMode属性: MsgBox IIf(ActiveWorkbook.Excel8CompatibilityMode, \是\否\问题187:
如何判断今年是否闰年? 答:
MsgBox IIf(Day(VBA.DateSerial(Year(Date), 3, 0)) = 29, \闰年\不闰年\
也就是说2月有29天就可以判断今年属于闰年。 问题188:
如何禁用Excel的功能区? 答:需要使用宏表函数:
Application.ExecuteExcel4Macro \
其实就是将功能区隐藏,但是比快捷键【Ctrl+F1】隐藏得更彻底。
问题189:
打开文件时提示“安全警告(宏已被禁用)”如何处理?
答:进入选项对话框的信任中心设置界面,将“宏设置”选项修改为“启用所有宏”。 问题190:
能让工作表中插入的图片具有单击或双击事件吗?
答:直接插入的图片不具备该事件,但是通过Image控件是可以做到的。所以可以先插入一个控件,再将图片导入控件中即可。
问题191:
如何调用“选择和可见性”窗口? 答:可以通过录制宏得到代码:
Sub Auto_open()
Application.CommandBars(\
End Sub
问题192:
可以限制窗体中的文本框不管录入大写还是小写字母都只能显示为小写状态吗? 答:在 TextBox1_KeyPress事件中录入以下代码:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) If KeyAscii >= 65 And KeyAscii <= 90 Then KeyAscii = KeyAscii + 32 End Sub
问题193:
可以修改工作表中的网格颜色吗?
答:ActiveWindow.GridlineColor属性控制网格线颜色,所以对它赋值为颜色值即可。
ActiveWindow.GridlineColor = 255 问题194: