ActiveWorkbook属性
ActiveWorkbook属性返回Workbook对象,代表活动窗口中的工作簿。下面的示例显示活动工作簿的名称:
MsgBox \活动工作簿的名称是\
下面的示例设置计算模式为手动,然后遍历并计算活动工作簿中的每个工作表: Sub CalcBook() Dim wks As Worksheet
Application.Calculate = xlManual
For Each wks In ActiveWorkbook.Worksheets wks.Calculate Next
Set wks = Nothing End Sub
RangeSelection属性
RangeSelection属性返回Range对象,代表在指定的窗口的工作表中所选择的单元格,即使是工作表中激活或选择的图形对象。下面的示例显示活动窗口的工作表中所选择的单元格的地址:
MsgBox Application.ActiveWindow.RangeSelection.Address
当选择单元格区域时,RangeSelection属性和Selection对象代表相同的单元格区域。当选择图形时,RangeSelection属性返回以前的单元格选区。关于Selection属性的更多介绍参见下节。
下面的示例显示单元格中头三个字符: Range(\
MsgBox Left(ActiveWindow.RangeSelection, 3) 下面的示例显示单元格名称的头三个字符: Range(\
MsgBox Left(ActiveWindow.RangeSelection.Name.Name, 3) 命令RangeSelection.Name.Name返回单元格名称。 ScreenUpdating属性
ScreenUpdating属性用于控制屏幕刷新,可将其值设置为True或False。通常,Excel开启了屏幕刷新(即该属性值为True),因此在代码执行时,Excel会随着代码的操作而不断更新屏幕显示,这样在运行处理涉及到多个工作表或单元格中的大量数据的代码(选择或激活对象)时,屏幕会不停闪烁,并且会占用CPU的处理时间,从而降低程序的运行速度。
可以在程序代码的开始部分设置ScreenUpdating属性为False,即
Application.ScreenUpdating=False,以关闭屏幕刷新,这样不仅能够使代码运行更快,而且使得界面对用户更为友好。在程序结束前,将该属性设置为True,以恢复Excel对屏幕更新的控制。
然而,在宏运行的过程中,如果需要显示用户窗体或者内置对话框,建议先恢复屏幕刷新,否则拖动用户窗体时,会在屏幕上产生橡皮擦的效果。当然,在显示该对象后,可以重新关闭屏幕刷新。
Selection属性
Selection属性返回活动窗口中所选择的对象。例如,对于单元格,该属性返回Range对象;对于图表,该属性返回Chart对象。如果使用该属性时没有限定引用,则等价于Application.Selection。
下面的示例清除工作表Sheet1中的选区(假设选区是单元格区域): Worksheets(\下面的示例在变量NumRows中存储所选行的总数: numrows = 0
For Each area In Selection.Areas numrows = numrows + area.Rows.Count Next area
下面的示例统计所选区域中单元格的数量,并在消息框中显示结果: Dim cell As Object Dim count As Integer count = 0
For Each cell In Selection count = count + 1 Next cell
MsgBox count & \项被选择\
下面的示例确保在输入数据之前选择的是工作表:
If TypeName(ActiveSheet) <> \Then
MsgBox \本程序仅用于单元格区域\ Exit Sub End If
Range(\
StatusBar属性
StatusBar属性返回或设置状态栏中的文本。该属性允许改变显示在Excel窗口底部的状态栏中的信息,这特别有助于使用户了解需要花时间完成的操作处理的进度。因此,状态栏是一种告知用户当前程序信息的极好方式,并且状态栏不会干扰用户,也易被开发者利用。
如果Excel控制状态栏,则StatusBar属性返回False。此外,要恢复缺省的状态栏文本,只需设置该属性为False,即使隐藏了状态栏。
例如,下面的示例将现在正在处理的文件赋值给状态栏: Sub test()
Dim FileNum As Integer FileNum = 0 For Each file In Files
Application.StatusBar = \现在正在处理文件\ FileNum = FileNum + 1 Next End Sub
然后,当程序结束时,使用下面的语句将状态栏恢复为正常: Application.StatusBar = False
这是通知Excel并清空状态栏的最简单的方式。除非重新启动Excel,否则状态栏中会一直保持着使用Application.StatusBar所显示的文本,因此应该在合适的地方使用Application.StatusBar = False语句,尤其是应该考虑发生错误时如何恢复状态栏。另外,在使用状态栏时,需要选择一个合适的更新间隔,使之既不会影响程序性能又能为用户提供有用的信息。
可以创建自已的过程来使用StatusBar属性,以显示宏或其它过程的进度:
Sub ShowStatusBarProgress() Dim i As Long
Dim pctDone As Double Dim numSquares As Long Const MAXSQR As Long = 15 For i = 1 To 30 pctDone = i / 30
numSquares = pctDone * MAXSQR
Application.StatusBar = Application.WorksheetFunction.Rept(Chr(60), numSquares)
Application.Wait Now + TimeSerial(0, 0, 1) Next i
Application.StatusBar = False End Sub
本示例随着程序的运行逐渐显示由常量MAXSQR定义的15个小于符号,小于符号使用ASCⅡ字符60生成。本示例没有指示过程执行多长时间,只是显示了执行的进度。Wait方法摸拟宏占用的执行时间。
要在VBA代码中使用状态栏,首先确定在用户界面中是否显示了状态栏(因为用户极
有可能关闭了显示状态栏的选项),并且在状态栏使用完毕后,应将其恢复到用户原先的设置,因此在程序开始前,将状态栏的信息保存到一个变量中:
bStatusBarInfo=Application.DisplayStatusBar
然后,将DisplayStatusBar属性设置为True,以确保显示状态栏。在程序结束前,将状态栏恢复到原先的设置:
Application.DisplayStatusBar=bStatusBarInfo ThisWorkbook属性
ThisWorkbook属性返回Workbook对象,代表当前正运行的宏所在的工作簿。该属性允许加载项引用包含代码的工作簿。ActiveWorkbook属性在该实例中不会工作,因为活动工作簿可能不是包含加载项代码的工作簿。换句话说,ActiveWorkbook属性不会返回加载项工作簿,它返回调用加载项的工作簿。如果从VB代码创建了一个加载项,应该使用ThisWorkbook属性限定必须在编译到该加载项的工作簿中运行的语句。
下面的示例关闭包含示例代码的工作簿,如果修改了该工作簿,则不会保存修改。 ThisWorkbook.Close SaveChanges:=False
下面的示例遍历每个打开的工作簿并将其关闭,然后关闭包含该代码的工作簿。 Sub CloseOpenWrkBks() Dim wrkb As Workbook
For Each wbk In Application.Workbooks If wrkb.Name <> ThisWorkbook.Name Then wbk.Close True End If Nextwbk
ThisWorkbook.Close True End Sub
Application对象相关的方法
下面探讨Application对象经常使用的一些方法。 FindFile方法和Dialogs集合
与GetOpenFilename方法不同,FileFind方法显示“打开”对话框并允许用户打开文件。如果成功打开文件,那么该方法返回True;如果用户取消了该对话框,那么该方法返回False。
下面的示例显示一条消息,告诉用户打开一个指定的文件,然后显示“打开”对话框。如果用户不能够打开该文件,则显示一条消息。
Sub OpenFile1()
Dim bSuccess As Boolean
MsgBox \请定位到MonthlySales.xls文件.\bSuccess = Application.FindFile If Not bSuccess Then MsgBox \该文件没有打开.\
End If End Sub
也可以使用Dialogs集合打开特定的对话框来完成相同的操作。使用Dialogs集合的优势之一是使用Show方法,可以传递参数修改内置对话框的缺省行为。例如,xlDialogOpen的参数为:file_text、update_links、read_only、format、prot_pwd、write_res_pwd、ignore_rorec、file_origin、custom_delimit、add_logical、editable、file_access、notify_logical、converter。
注:要找到特定对话框的参数,在Excel帮助的“内置对话框参数列表”中查找相应的对话框常量。
下面的示例显示在文件名框中带有Book1.xlsm的“打开”对话框,允许用户显示缺省文件而不必选择文件。
Sub OpenFile2()
Application.Dialogs(XlBuiltInDialog.xlDialogOpen).Show arg1:=\End Sub
Dialogs集合的优点在于,可以使用它来显示任何的Excel对话框(大约有250个)。通过下述步骤可以找到对话框完整列表。
(查找对话框集合的成员列表) 1、打开VBE。
2、单击“查看——对象浏览器”或者按F2键,显示“对象浏览器”。 3、在搜索框中输入xlDialog。 4、单击“搜索”按钮。
对Excel 2007而言,可以使用CommandBar对象来执行功能区中的命令,例如,下面的语句显示“定位”对话框:
Application.CommandBars.ExecuteMso (\
ExecuteMso方法执行由idMso参数标识的控件。idMso参数的取值可以查找网上资源。
下面的语句显示“设置单元格格式”对话框中的“字体”选项卡: Application.CommandBars.ExecuteMso (\GetOpenFilename方法
GetOpenFilename方法显示标准的“打开”对话框并从用户处获取文件名称,但不真正打开任何文件,而是以字符串返回用户选择的文件名及其路径。那么,您可以利用该字符串完成所需要的操作,例如可以传递返回的结果到OpenText方法。下面是GetOpenFilename方法的语法(所有参数都是可选的):
GetOpenFilename(FileFilter,FilterIndex,Title,ButtonText,MultiSelect)
参数FileFilter是一个字符串,规定筛选条件(例如,*.txt,*.xla),在“打开”文件对话框中只显示与筛选条件相匹配的文件,默认为“所有文件(*.*),*.*”。参数FilterIndex指定缺省的文件筛选条件的索引值,从1到参数FileFilter中指定的筛选数,默认使用索引值为1的