ExcelVBAApplication方法属性大全_第1页
ExcelVBAApplication方法属性大全_第2页
ExcelVBAApplication方法属性大全_第3页
ExcelVBAApplication方法属性大全_第4页
ExcelVBAApplication方法属性大全_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Application Excel方法属性Application 对象是 Excel 对象模型中最高层级的对象, 代表 Excel 应用程序自身, 也包 含组成工作簿的许多部分,包括工作簿、工作表、单元格集合以及它们包含的数据。Application 对象包含:应用程序设置和选项,许多选项与 “选项 ”对话框中的选项相同。返回顶级对象的方法,例如ActiveCell 、 ActiveSheet ,等等。本文使用 VBA 代码示例简要介绍了与Application 对象相关的经常使用的对象、 方法和属性, 其中一些成员能够改变用户与Excel 应用程序交互的方式, 还能够改变应用程序的外观和式样

2、。熟悉 Application 对象能够让您扩展和调整Excel 的功能,以满足自已的需求。本文主要介绍的内容如下:从 Application 对象中引用对象Application 对象相关的集合? AddIns 集合? Columns 集合和 Rows 集合?Dialogs 集合?Sheets 集合Application 对象相关的属性?ActiveCell 属性?ActiveChart 属性?ActiveSheet 属性?ActiveWindow 属性?ActiveWorkbook属性?RangeSelection属性?ScreenUpdating属性?Selection 属性?Statu

3、sBar 属性?ThisWorkbook 属性Application 对象相关的方法? FindFile 方法和 Dialogs 集合? GetOpenFilename 方法? GetSaveAsFilename 方法? InputBox 方法? Run 方法? 激活Application 事件监视使用Application 对象执行其它任务?删除工作表而显示提示信息( DisplayAlerts属性)?无须提示用户而保存工作表( DisplayAlerts属性)? 使用 SendKeys 方法发送信息到记事本?安排宏在指定的时间和间隔运行(OnTime方法)Application 对象的其它

4、一些属性和方法?Caller 属性?CutCopyMode 属性?Evaluate 方法?OnKey 方法?ThisCell 属性?WorksheetFunction 属性?改变光标显示( Cursor 属性)?获取或改变Excel 窗口的状态或大小( WindowState 属性)?获取系统信息? 自动隐藏公式栏( DisplayFormulaBar 属性)? 将 Excel 全屏显示( DisplayFullScreen 属性)? 获取 Excel 启动文件夹的路径( StartupPath 属性)?检测Excel 的版本( Version 属性)?打开最近使用过的文档( RecentFi

5、les 属性)?文件对话框操作( FileDialog 属性)?改变Excel 工作簿的名称( Caption 属性)? 调用 Windows 的计算器( ActivateMicrosoftApp 方法)?暂时停止宏运行( Wait 方法)?重新计算工作簿(Calculate 方法)?控制函数重新计算( Volatile 方法)?获取重叠区域(Intersect 方法)? 获取路径分隔符( PathSeparator 属性)? 快速移至指定位置( Goto 方法)? 关闭 Excel ( Quit 方法)从 Application 对象中引用对象Application20:使用 Applica

6、tion 属性返回 Application 对象。 在引用应用程序之后, 要访问 对象下面的对象,则依次下移对象模型层级。例如,下面的代码设置第一个工作簿的第一个工作表中的第一个单元格的值为要引用该单元格,上述代码以 Application 对象开始,移至第一个工作簿,然后到第一个工作表,最后到达单元格。下面的示例代码在另一个应用程序中创建一个Excel 工作簿,然后打开该工作簿:Set xl = CreateObject(Excel.Sheet)xl.Application.Workbooks.Open newbook.xls可以使用许多属性和方法返回最常用的用户界面对象,例如活动工作表(

7、ActiveSheet属性),而无须Application 对象限定。例如,下面的代码:Application.ActiveSheet.Name = Monthly Sales可以替换为:ActiveSheet.Name = Monthly Sales然而,在使用简短的引用时必须小心,必须已经选择了正确的对象。如果已经使用诸如 Worksheet 对象的 Activate 方法选择了合适的工作簿和工作表,那么能够使用下面的代码引用第一个单元格:Cells(1, 1) = 20有一些实例必须使用 Application 限定引用。例如, OnTime 方法、应用程序窗口的Width 和 Heig

8、ht 属性。通常,处理Excel 窗口外观的属性或者影响应用程序全部行为的属性需要 Application 限定, 例如 DisplayFormulaBar 属性用于显示或隐藏公式栏。 Calculation 方法也需要限定。Application 对象相关的集合本节介绍与 Application 对象相关的一些集合。AddIns 集合AddIns 集合代表当前在Excel 中装载的所有加载项。就像遍历任何其它集合一样,可以列出应用程序中关于加载项的不同类型的信息。 下面的示例列出当前在 Excel 中装载的加载项的路径和名称:Sub ListAddIns()Dim myAddin As Ad

9、dInFor Each myAddin In AddInsMsgBox myAddin.FullNameNextEnd SubColumns 集合和 Rows 集合这些集合代表当前工作簿中的列和行,可以使用它们分别选择指定的列和行。Application.Columns(4).Select上述语句选择 D 列,就像在工作表中单击该列的标题一样。上述语句选择第5 行,就像在工作表中单击该行的行边一样。Dialogs 集合Dialogs 集合由应用程序中所有的对话框组成。本文后面将详细介绍该集合。Sheets 集合Sheets 对象返回指定工作簿或活动工作簿中所有工作表的集合。 Sheets 集合

10、包含Chart 对象或 Worksheet 对象。下面的示例打印活动工作簿中所有工作表:Application.Sheets.PrintOut下面的示例遍历工作簿中所有的工作表,并打印包含有数据的工作表:For iSheet = 1 To Application.Sheets.CountIf Not IsEmpty(Application.Sheets(iSheet).UsedRange) ThenApplication.Sheets(iSheet).PrintOut copies:=1End IfNext iSheetApplication 对象相关的属性在 Excel 2007 应用程序中

11、,有大量的属性用来访问不同的对象。这里,只探讨经常使用的属性。? ActiveCell? ActiveChart? ActiveSheet? ActiveWindow? ActiveWorkbook? RangeSelection? ScreenUpdating? Selection? StatusBar? ThisWorkbookActiveCell 属性Application 对象的 ActiveCell 属性返回 Range 对象, 代表活动工作簿的活动工作表中 的活动单元格。如果没有指定对象限定,那么该属性返回活动窗口中的活动单元格。注意区分活动单元格和单元格选区。活动单元格是当前选区

12、里的单个单元格,选区可能包含很多单元格,但仅有一个单元格是活动单元格。下面的示例改变活动单元格的字体格式。注意确保正在处理正确的单元格,Worksheets 集合的 Activate 方法使工作表Sheet1 为活动工作表。Worksheets(Sheet1).Activate With ActiveCell.Font .Bold = True .Italic = True EndWithActiveChart 属性ActiveChart 属性返回 Chart 对象,代表活动图表,无论该图表是嵌入式图表还是图表工作表。当嵌入式图表被选择或者被激活时,该图表是活动图表。下面的示例使用Active

13、Chart 属性在工作表Monthly Sales 中添加一个三维柱形图:Sub AddChart()Charts.AddWith ActiveChart.ChartType = xl3DColumn.SetSourceData Source:=Sheets(Sheet1).Range(B3:H15).Location Where:=xlLocationAsObject, Name:=Monthly Sales.HasTitle = True.ChartTitle.Characters.Text = Monthly Sales by CategoryEnd WithEnd SubActiveS

14、heet 属性ActiveSheet 属性返回 Worksheet 对象, 代表当前所选择的工作表 (在顶部的工作表)在一个工作簿中仅仅有一个工作表是活动工作表。下面的示例显示活动工作表的名字:MsgBox 活动工作表的名字是 & ActiveSheet.Name下面的示例由用户指定复制活动工作表的次数并复制活动工作表,将复制的工作表放置到工作表Sheet1 的前面:Sub CopyActiveSheet()Dim x As Integer, numtimes As Integerx = InputBox( 请输入复制活动工作表的次数)For numtimes = 1 To x 在工作表 Sh

15、eet1 的前面放置工作表副本ActiveWorkbook.ActiveSheet.Copy Before:=ActiveWorkbook.Sheets(Sheet1)NextEnd SubActiveWindow 属性ActiveWindow 属性返回 Window 对象,代表活动窗口(在顶部的窗口)。下面的示例显示活动窗口的名称( Caption 属性):MsgBox 活动窗口的名称是 & ActiveWindow.CaptionCaption 属性返回活动窗口的名称, 允许使用名称而不是索引号来更清楚地访问该窗口。下面的示例选择并打印工作表,然后对第二个工作表重复这一过程:Sub Pri

16、ntWorksheet()Application.ScreenUpdating = FalseSheets(Sales).SelectActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=TrueSheets(Expenses).SelectActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=TrueEnd Sub在该示例中,您可能奇怪为什么将ScreenUpdating 属性设置为 False 。当 Excel 执行一系列操作任务时, 屏幕被更新并且被刷新许多次, 这导致

17、屏幕闪烁。 设置 ScreenUpdating 属性为 False 消除这些闪烁。 此外, 因为计算机处理器无须为刷新屏幕而暂停, 这能使大的 应用程序运行得更快。 ActiveWorkbook 属性 ActiveWorkbook 属性返回 Workbook 对象,代表活动窗口中的工作簿。下面的示例显示活动工作簿的名称:MsgBox 活动工作簿的名称是 & ActiveWorkbook.Name下面的示例设置计算模式为手动,然后遍历并计算活动工作簿中的每个工作表:Sub CalcBook()Dim wks As WorksheetApplication.Calculate = xlManual

18、For Each wks In ActiveWorkbook.Worksheets wks.CalculateNextSet wks = NothingEnd SubRangeSelection 属性RangeSelection 属性返回 Range 对象, 代表在指定的窗口的工作表中所选择的单元格,即使是工作表中激活或选择的图形对象。 下面的示例显示活动窗口的工作表中所选择的单元格的地址:MsgBox Application.ActiveWindow.RangeSelection.Address当选择单元格区域时, RangeSelection 属性和 Selection 对象代表相同的单元

19、格区域。当选择图形时, RangeSelection 属性返回以前的单元格选区。 关于 Selection 属性的更多介 绍参见下节。 下面的示例显示单元格中头三个字符:Range(A1).SelectMsgBox Left(ActiveWindow.RangeSelection, 3) 下面的示例显示单元格名称的头三个字符:Range(A1).SelectMsgBox Left(ActiveWindow.RangeSelection.Name.Name, 3) 命令 RangeSelection.Name.Name 返回单元格名称。ScreenUpdating 属性ScreenUpdatin

20、g 属性用于控制屏幕刷新, 可将其值设置为 True 或 False 。 通常, Excel 开启了屏幕刷新 (即该属性值为 True ), 因此在代码执行时, Excel 会随着代码的操作而不断更新屏幕显示, 这样在运行处理涉及到多个工作表或单元格中的大量数据的代码 (选择或激活对象) 时, 屏幕会不停闪烁, 并且会占用 CPU 的处理时间, 从而降低程序的运行速度。可以在程序代码的开始部分设置 ScreenUpdating 属性为 False ,即Application.ScreenUpdating=False ,以关闭屏幕刷新,这样不仅能够使代码运行更快,而且使得界面对用户更为友好。在程

21、序结束前,将该属性设置为 True ,以恢复 Excel 对屏幕更新的控制。然而,在宏运行的过程中,如果需要显示用户窗体或者内置对话框,建议先恢复屏幕刷新,否则拖动用户窗体时,会在屏幕上产生橡皮擦的效果。当然,在显示该对象后,可以重新关闭屏幕刷新。Selection 属性Selection 属性返回活动窗口中所选择的对象。例如,对于单元格,该属性返回 Range对象;对于图表,该属性返回 Chart 对象。如果使用该属性时没有限定引用,则等价于 Application.Selection 。下面的示例清除工作表Sheet1 中的选区(假设选区是单元格区域):Worksheets(Sheet1)

22、.ActivateSelection.Clear下面的示例在变量NumRows 中存储所选行的总数:numrows = 0For Each area In Selection.Areasnumrows = numrows + area.Rows.CountNext area下面的示例统计所选区域中单元格的数量,并在消息框中显示结果:Dim cell As ObjectDim count As Integercount = 0For Each cell In Selectioncount = count + 1Next cellMsgBox count & 项被选择 下面的示例确保在输入数据之前

23、选择的是工作表:If TypeName(ActiveSheet) Worksheet Or TypeName(Selection) RangeThenMsgBox 本程序仅用于单元格区域, vbCriticalExit SubEnd IfRange(A1).Value = 20StatusBar 属性StatusBar 属性返回或设置状态栏中的文本。 该属性允许改变显示在 Excel 窗口底部的状态栏中的信息, 这特别有助于使用户了解需要花时间完成的操作处理的进度。 因此, 状态栏是一种告知用户当前程序信息的极好方式, 并且状态栏不会干扰用户, 也易被开发者利用。如果 Excel 控制状态栏,

24、则 StatusBar 属性返回 False 。此外,要恢复缺省的状态栏文本,只需设置该属性为 False ,即使隐藏了状态栏。例如,下面的示例将现在正在处理的文件赋值给状态栏:Sub test()Dim FileNum As IntegerFileNum = 0For Each file In FilesApplication.StatusBar = 现在正在处理文件 & FileNumFileNum = FileNum + 1NextEnd Sub然后,当程序结束时,使用下面的语句将状态栏恢复为正常:Application.StatusBar = False这是通知 Excel 并清空状态

25、栏的最简单的方式。 除非重新启动Excel , 否则状态栏中会一直保持着使用 Application.StatusBar 所显示的文本,因此应该在合适的地方使用Application.StatusBar = False 语句,尤其是应该考虑发生错误时如何恢复状态栏。另外,在使用状态栏时, 需要选择一个合适的更新间隔, 使之既不会影响程序性能又能为用户提供有用的信息。可以创建自已的过程来使用 StatusBar 属性,以显示宏或其它过程的进度:Sub ShowStatusBarProgress()Dim i As LongDim pctDone As DoubleDim numSquares A

26、s LongConst MAXSQR As Long = 15For i = 1 To 30pctDone = i / 30numSquares = pctDone * MAXSQRApplication.StatusBar = Application.WorksheetFunction.Rept(Chr(60), numSquares)Application.Wait Now + TimeSerial(0, 0, 1)Next iApplication.StatusBar = FalseEnd Sub本示例随着程序的运行逐渐显示由常量MAXSQR 定义的 15 个小于符号, 小于符号使用AS

27、CH字符60生成。本示例没有指示过程执行多长时间,只是显示了执行的进度。Wait方法摸拟宏占用的执行时间。要在 VBA 代码中使用状态栏, 首先确定在用户界面中是否显示了状态栏 (因为用户极有可能关闭了显示状态栏的选项) , 并且在状态栏使用完毕后, 应将其恢复到用户原先的设置,因此在程序开始前,将状态栏的信息保存到一个变量中:bStatusBarInfo=Application.DisplayStatusBar然后,将 DisplayStatusBar 属性设置为 True ,以确保显示状态栏。在程序结束前,将状态栏恢复到原先的设置:Application.DisplayStatusBar=

28、bStatusBarInfoThisWorkbook 属性ThisWorkbook 属性返回 Workbook 对象, 代表当前正运行的宏所在的工作簿。 该属性允许加载项引用包含代码的工作簿。ActiveWorkbook 属性在该实例中不会工作,因为活动工作簿可能不是包含加载项代码的工作簿。换句话说, ActiveWorkbook 属性不会返回加载项工作簿,它返回调用加载项的工作簿。如果从VB 代码创建了一个加载项,应该使用ThisWorkbook 属性限定必须在编译到该加载项的工作簿中运行的语句。下面的示例关闭包含示例代码的工作簿,如果修改了该工作簿,则不会保存修改。ThisWorkbook

29、.Close SaveChanges:=False 下面的示例遍历每个打开的工作簿并将其关闭,然后关闭包含该代码的工作簿。Sub CloseOpenWrkBks()Dim wrkb As WorkbookFor Each wbk In Application.WorkbooksIf wrkb.Name ThisWorkbook.Name Thenwbk.Close TrueEnd IfNextwbkThisWorkbook.Close TrueEnd SubApplication 对象相关的方法下面探讨 Application 对象经常使用的一些方法。FindFile 方法和 Dialogs

30、集合与 GetOpenFilename 方法不同,FileFind 方法显示 “打开 ”对话框并允许用户打开文件。如果成功打开文件, 那么该方法返回 True ; 如果用户取消了该对话框, 那么该方法返回 False 。下面的示例显示一条消息, 告诉用户打开一个指定的文件, 然后显示 “打开 ”对话框。 如果用户不能够打开该文件,则显示一条消息。Sub OpenFile1()Dim bSuccess As BooleanMsgBox 请定位到 MonthlySales.xls 文件 .bSuccess = Application.FindFileIf Not bSuccess ThenMsgB

31、ox 该文件没有打开.End IfEnd 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_lo

32、gical 、 converter 。注: 要找到特定对话框的参数, 在 Excel 帮助的 “内置对话框参数列表”中查找相应的对话框常量。下面的示例显示在文件名框中带有Book1.xlsm 的 “打开 ”对话框,允许用户显示缺省文件而不必选择文件。Sub OpenFile2()Application.Dialogs(XlBuiltInDialog.xlDialogOpen).Show arg1:=Book1.xlsmEnd SubDialogs 集合的优点在于,可以使用它来显示任何的 Excel 对话框(大约有250 个)。通过下述步骤可以找到对话框完整列表。(查找对话框集合的成员列表)、打

33、开 VBE 。、单击 “查看 对象浏览器 ”或者按 F2 键,显示 “对象浏览器”。、在搜索框中输入 xlDialog 。、单击 “搜索 ”按钮。对 Excel 2007 而言,可以使用 CommandBar 对象来执行功能区中的命令,例如,下面的语句显示 “定位 ”对话框:Application.CommandBars.ExecuteMso (GoTo)ExecuteMso 方法执行由 idMso 参数标识的控件。 idMso 参数的取值可以查找网上资 源。 下面的语句显示 “设置单元格格式”对话框中的 “字体 ”选项卡:Application.CommandBars.ExecuteMso

34、(FormatCellsFontDialog)GetOpenFilename 方法GetOpenFilename 方法显示标准的 “打开 ”对话框并从用户处获取文件名称,但不真正打开任何文件, 而是以字符串返回用户选择的文件名及其路径。 那么, 您可以利用该字符串完成所需要的操作, 例如可以传递返回的结果到 OpenText 方法。 下面是 GetOpenFilename 方法的语法(所有参数都是可选的):GetOpenFilename(FileFilter,FilterIndex,Title,ButtonText,MultiSelect)参数 FileFilter 是一个字符串,规定筛选条件

35、(例如, *.txt , *.xla ),在 “打开 ”文件对话框中只显示与筛选条件相匹配的文件, 默认为 “所有文件 (*.*),*.* 。 ”参数 FilterIndex 指定缺省 的文件筛选条件的索引值,从1 到参数 FileFilter 中指定的筛选数,默认使用索引值为 1 的文件筛选条件。参数Title 指定对话框的标题,默认显示 “打开 ”。参数 ButtonText 仅用于Macintosh 计算机。参数 MultiSelect 是一个 Boolean 值,指定能否选择多个文件,默认仅 能够选择单个文件。下面的示例显示在文件类型中设置为文本文件( *.txt )的 “打开 ”对话

36、框,然后显示带有 用户选择的信息的消息框。注意,文件并没有被打开。Dim fileToOpen As StringfileToOpen = Application.GetOpenFilename( 文本文件 (*.txt),*.txt)If fileToOpen ThenMsgBox 打开 & fileToOpenEnd If下面的示例获取多个工作簿:Sub TestGetFiles()Dim nIndex As IntegerDim vFiles As VariantDim strFileName As String 获取多个 Excel 文件vFiles = GetExcelFiles(

37、测试 GetExcelFiles 函数 ) 确保没有取消对话框 . 如果用户 取消对话框,函数返回 False, 而不是数组If Not IsArray(vFiles) Then MsgBox 没有选择文件.Exit SubEnd If 如果没有取消对话框,则遍历文件For nIndex = 1 To UBound(vFiles) strFileName = strFileName & vbCrLf & vFiles(nIndex)Next nIndex 显示用户所选择的文件名称MsgBox 用户已选择的文件如下: & vbCrLf & strFileNameEnd Sub允许选择多个文件返回

38、含有文件名称的数组Function GetExcelFiles(sTitle As String) As VariantDim sFilter As StringDim bMultiSelect As BooleansFilter = Excel 工作簿 (*.xlsx),*.xlsxbMultiSelect = TrueGetExcelFiles = Application.GetOpenFilename(FileFilter:=sFilter, Title:=sTitle,MultiSelect:=bMultiSelect) End Function 当将 GetOpenFilename

39、方法的参数MultiSelect 设置为 True 时, 如果用户选择了文件,那么将返回一个变体类型的数组, 且数组索引值基于 1 而不是 0 ; 如果用户取消了选择文件, 那么返回 False 。 在 TestGetFiles 过程的代码中, 使用 IsArray 函数测试返回值是否是数组。 如果使用 vFiles=False 来判断的话,当用户选择了文件时,由于返回的值为数组,则会导 致运行时错误:类型不匹配。 GetSaveAsFilename 方法 GetSaveAsFilename 方法显示 “另存为 ”对话框,允许用户指定一个文件名和需要保存文件的位置,但是实际上并没有保存文件。

40、GetSaveAsFilename 方法的语法如下(所有参 数都是可选的):Application.GetSaveAsFilename(InitialFilename,FileFilter,FilterIndex,Title,ButtonTex t)参数 InitialFilename 为指定文件名的字符串,默认为活动工作簿的名称,若不需要指定初始文件名,则将其设置为空字符串( ” );参数 FileFilter 是表示筛选条件的字符串,在“另存为 ”对话框只显示与筛选条件相匹配的文件, 默认为 “所有文件 (*.*),*.* ; 参数” FilterIndex 用来指定缺省的文件筛选条件的索

41、引值,默认使用索引值为 1 的文件筛选条件;参数Title指定显示对话框标题的字符串文本, 默认显示 “另存为 ”; 参数 ButtonText 仅用于 Macintosh 计算机。 下面介绍一个综合示例, 是 Steven M. Hansen 编写的, 从完整的文件名字符串中分解出文件路径和文件名。Sub TestBreakdownName()Dim sPath As String Dim sName As String Dim sFileName As String Dim sMsg As StringsFileName = Application.GetSaveAsFilename Br

42、eakdownNamesFileName , sName, sPathsMsg = 文件名是 : & sName & vbCrLf sMsg = sMsg & 文件路径是: & sPathMsgBox sMsg, vbOKOnlyEnd SubFunction GetShortName(sLongName As String) As StringDim sPath As StringDim sShortName As StringBreakdownNamesLongName , sShortName, sPathGetShortName = sShortNameEnd FunctionSub

43、BreakdownName(sFullName As String, ByRef sName As String, ByRef sPathAs String)Dim nPos As Integer 找出文件名从哪里开始nPos = FileNamePosition(sFullName)If nPos 0 ThensName = Right(sFullName, Len(sFullName) - nPos)sPath = Left(sFullName, nPos - 1)Else 无效的文件名End IfEnd Sub返回提供的完整文件名中文件名的位置或首字符索引值完整文件名包括路径和文件名例如

44、 :FileNamePosition(C:TestingTest.xlsx)=11Function FileNamePosition(sFullName As String) As IntegerDim bFound As BooleanDim nPosition As IntegerbFound = FalsenPosition = Len(sFullName)Do While bFound = False 确保不是零长度字符串If nPosition = 0 Then Exit Do 从右开始查找第一个If Mid(sFullName, nPosition, 1) = ThenbFound

45、 = TrueElse 从右至左nPosition = nPosition - 1End IfLoopIf bFound = False ThenFileNamePosition = 0ElseFileNamePosition = nPositionEnd IfEnd Function除了运行TestBreakdownName过程获取文件名和文件路径外,还可以使用GetShortName 函数仅获取文件名。此外,在 Sub过程BreakdownName 中使用了 ByRef 参数,即通过引用传递参数,这样传递给子过程的参数改变后,调用子过程的主过程中相应的参数也随之改变。InputBox 方法

46、InputBox方法提供了一种程序与用户之间进行简单的交互的方式,允许我们从用户处 获得信息。该方法将显示一个对话框,提示用户输入某值。 通过指定希望用户输入的数据类型,InputBox方法能够进行数据验证。InputBox方法的语法如下:InputBox(Prompt,Title,Default,Left,Top,HelpFile,HelpContextID,Type)其中:参数Prompt是在对话框中显示的消息。这里,可以提示用户您希望用户输入的数据类型。该参数是唯一的必需参数。参数Title是对话框顶部显示的标题。缺省使用应用程序名称。参数Default是对话框最初显示时的缺省值。参数L

47、eft和Top用于指定对话框的位置,这些值相对于屏幕的左上角且以磅为单位。如果忽略,则对话框将水平居中且距屏幕顶约1/3处。1。参数HelpFile和HelpContextId 指定帮助文件,如果使用了这两个参数,那么在对话 框中将出现帮助按钮。参数Type指定需要返回的数据类型。缺省为文本,允许的类型列于表值表1: InputBox方法返回的数据类型0公式。公式作为字符串被返回。这是仅有的必需的参数。1数值。也可以包括返回值的公式。2文本(字符串)4逻辑值(True或False )8单元格引用,作为 Range对象16错误值,例如#N/A64值列表注意,如果Type为8,那么必须使用 Set

48、语句将结果赋值给 Range对象,如下面的代码所示:Set myRange = Application.InputBox(Prompt:= 示例, Type:=8)如果希望允许输入多种数据类型,那么可以使用上表中的任意数值组合。例如,如果要显示一个可以接受文本或数值的输入框,则可以将type的值设置为3(即1+2的结果)取消 ”按钮,如果输入了错误类型的数据,则显示错误消息并提示再次输入数据。如果单击则返回 False 。下面的示例提示用户输入希望打印活动工作表的份数(注意, type 指定希望输入的是一个数值):Sub PrintActiveSheet()Dim TotalCopies As

49、 Long, NumCopies As LongDim sPrompt As String, sTitle As StringsPrompt = 您想要多少副本?sTitle = 打印活动工作表TotalCopies = Application.InputBox(Prompt:=sPrompt, Title:=sTitle, Default:=1,Type:=1)For NumCopies = 1 To TotalCopiesActiveSheet.PrintOutNext NumCopiesEnd Sub如果将 InputBox 方法的返回值赋给一个Variant 型变量, 则可以检测该值是

50、否为 False 。如果要返回单元格区域,则使用像下面的代码会更好:Sub GetRange()Dim rng As RangeOn Error Resume NextSet rng = Application.InputBox(Prompt:= 输入单元格区域 , Type:=8)If rng Is Nothing ThenMsgBox 操作取消 Elserng.SelectEnd IfEnd Sub此时,必须使用 Set 语句将 Range 对象赋值给某对象变量,如果用户单击 “取消 ”按钮则返回值 False , Set 语句将失败并提示运行时错误。使用 On Error Resume

51、Next 语句避免运行时错误,然后检查是否产生了一个有效的区域。如果用户单击 “确定 ”按钮,那么InputBox 方法检查内置类型以确保将返回有效的区域,因此空区域表明单击了 “取消 ”按钮。Run 方法Run 方法执行一个宏或调用一个函数。 可以使用该方法运行由 VBA 或 Excel 宏语言编写的宏,或者运行动态链接库( DLL )里的函数或Excel 加载项( XLL )。 XLL 是使用任何支持创建 DLLs 的编译器为 Excel 创建的加载项。 Run 方法的语法为:Run(Macro,Arg1,Arg30)参数 Macro 是要执行的宏或函数的名称,参数Arg1 至 Arg30

52、 是需要传递给宏或函数 的一些参数。下面的示例使用 Run 方法调用一个过程,设置单元格区域中单元格的字体为粗体。当然,也可以使用 Call 方法获得相同的结果。Sub UseRunMethod()Dim wks As WorksheetDim rng As RangeSet wks = Worksheets(Sheet2)Set rng = wks.Range(A1:A10)Application.Run MyProc, rng也能够使用下面的语句完成相同的任务Call MyProc(rng)End SubSub MyProc(rng As Range)With rng.Font.Bold

53、= TrueEnd WithEnd SubApplication 对象相关的事件Application 对象也有一些事件,能够用于监视整个Excel 应用程序的行为。要使用Application 事件,必须启用事件监视。激活 Application 事件监视、单击 “插入 类模块” ,创建一个类。、在属性中,将类的名称改为 AppEventClass 。3、在类的代码窗口,添加下面的代码:Public WithEvents Appl As Application现在,能够在应用程序中运用应用程序级事件。、在代码窗口顶部左侧的对象列表中,选择Appl 。、在代码窗口顶部右侧的过程列表中,选择Wo

54、rkbookOpen 。此时,将为Appl_WorkbookOpen 过程插入一对占位符。6、在过程中添加下面的语句:Private Sub Appl_WorkbookOpen(ByVal Wb As Workbook) MsgBox 已打开工作 簿.End Sub、重复上面的步骤插入 Appl_WorkbookBeforeClose 事件,并添加下面的语句:Private Sub Appl_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean) MsgBox 关闭工作簿.End Sub、接下来,创建一个变量用于引用类模块中创建

55、的 Application 对象。在工程资源管理器中,双击ThisWorkbook 打开代码窗口。9、添加下面的语句。Dim ApplicationClass As New AppEventClass通过在 ThisWorkbook 代码窗口添加下面的语句,创建所声明的对象对Application 对象的连接:Private Sub Workbook_Open()Set ApplicationClass.Appl = ApplicationEnd Sub、保存并关闭该工作簿。、现在,测试代码。打开该工作簿,将触发Appl_WorkbookOpen 事件,显示相应的信息框。、关闭该工作簿,将触发

56、Appl_WorkbookBeforeClose 事件,显示相应的信息框。、 切换回 AppEventClass 类模块并单击过程列表显示能够用于监控应用程序行为的一系列事件。理解这些事件如何被触发以及事件的顺序对理解应用程序是重要的。在类模块中添加其他的事件并插入消息框,然后试验不同的行为来看看何时触发某特定的事件。使用Application 对象执行其它任务除了Application 对象中最常用的对象外,您可能希望在Excel 应用程序中执行一些其他任务。下面我们就来探讨这方面的内容。删除工作表而显示提示信息( DisplayAlerts 属性)下面的示例首先关闭询问是否保存工作表的任何

57、消息,接着删除工作表并打开警告消息。Sub DeleteSheet()Application.DisplayAlerts = FalseActiveSheet.DeleteApplication.DisplayAlerts = TrueEnd Sub上述示例代码中使用了 DisplayAlerts 属性,将其值设置为 False 以自动执行Excel 警告对话框中默认按钮相关的操作。设置 DisplayAlerts 属性的意图在于,运行宏时不必响应系统出现的警告而使执行过程中断。当然,在过程结束前,最好将DisplayAlerts 属性设置为 True 。无须提示用户而保存工作表( Displ

58、ayAlerts 属性)下面的示例保存工作表,而没有通知用户是否保存。Sub SaveWorksheet()Application.DisplayAlerts = FalseActiveWorkbook.SaveAs C:MonthlySales.xlsApplication.DisplayAlerts = TrueEnd Sub此时,如果现有文件与要保存的文件名相同,那么会覆盖该文件而不会弹出任何警告消息。使用 SendKeys 方法发送信息到记事本SendKeys 方法允许发送按键到当前活动窗口,用来控制不支持任何其他交互形式的应用程序,例如 DDE( 动态数据交换)或 OLE 。下面的示

59、例使用 SendKeys 命令从 Excel 中复制数据区域到记事本, 然后保存该文件。Sub SKeys()Range(A1:D15).Copy 复制单元格区域SendKeys % n, True 最小化 ExcelShell notepad.exe, vbNormalFocus 开启记事本SendKeys AV, True 将数据粘贴到记事本SendKeys %FA, True 指定另存为SendKeys SalesData.txt, True 提供文件名SendKeys %S, True 保存文件End Sub本示例首先复制数据区域到剪贴板, 然后最小化 Excel , 开启记事本, 接

60、着从剪贴板复 制数据到记事本,最后指定文件名并保存文件。下面的示例打开了 “记事本 ”应用程序 (不支持 DDE 或 OLE) ,并将数据行写入记事本文档:Sub SKeys()Dim dReturnValue As DoubledReturnValue = Shell(NOTEPAD.EXE, vbNormalFocus)AppActivate dReturnValueApplication.SendKeys Copy Data.xlsx c:, TrueApplication.SendKeys , TrueApplication.SendKeys %FABATCH%S, TrueEnd S

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论