收藏 分享(赏)

VBA入门知识.doc

上传人:春华秋实 文档编号:3339860 上传时间:2018-10-15 格式:DOC 页数:82 大小:1,017KB
下载 相关 举报
VBA入门知识.doc_第1页
第1页 / 共82页
VBA入门知识.doc_第2页
第2页 / 共82页
VBA入门知识.doc_第3页
第3页 / 共82页
亲,该文档总共82页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、.VBA 帮助(摘自 Office2000 VBA 帮助)一、VB A 入 门知识1、激活 工作簿2、 创建新工作簿3、打 开工作簿4、用编 号引用工作表5、用名称引用工作表6、将文档保存为 Web 页7、用 A1 样式的记号引用单元格和单元格区域8、用编号引用单元格9、引用行或列10、用快捷记号 引用单元格11、 引用命名 单元格区域12、按相对于其他单元格的方式来引用单元格13、用 Range 对象引用单元格14、引用工作表上的所有单元格15、引用若干单元格区域16、在单元格区域中循环17、选 定和 激活单 元格18、处理 三维区域19、处理活动单元格20、在工作表上使用 ActiveX

2、控件21、在文档中使用 ActiveX 控件22、创建自定义对 话框23、在窗体上使用 Microsoft Office Web 组件24、内置对话框参数表25、使用 Microsoft Excel 对象的事件26、在 Visual Basic 中使用 Microsoft Excel 工作表函数27、处理 形状(图形对象)28、在某一 Microsoft Office 应用程序中控制其他 Microsoft Office 应用程序29、OLE 程序标 识符30、关于数 字签名31、启动 Mi crosoft Excel 时不运行“自动执行宏”32、 焦点 二、了解对象、 属性、方法和事件1、了

3、解对象 、属性、方法和事件 2、Ap plication 对象3、 Workbook 对象 4、Workbooks 属性5、Ra nge 对象6、Range 属性7、Cells 属性8、Ca ller 属性9、Offset 属性 10、Rows 属性11、Activate 事件12、Activate、 Deactivate 事件13、Activate 方法14、WorkbookA ctivate 事件15、WindowActivate 事件16、On Error 语句17、在工作表上使用 ActiveX 控件 18、Add 方法(Scenarios 集合)19、Scenarios 集合对象20

4、、Add 方法 (Validation 对象)21、Validation 对象22、Validation 属性23、Open 事件24、Open 方法25、 Click 事件.26、Close 方法27、Change 事件 28、Value 属性29、DblClick 事件 30、SheetBeforeRightClick 事件31、Select 方法 32、Sel ect 事件33、Goto 方法 34、Worksheet 对象35、SheetChange 事件 36、SheetA ctivate 事件37、Ope nLinks 方法38、Enabled 属性 三、 VBA 语法(一)Vis

5、ual B asic 的命名规则1、写 Visual Basic 语句2、写声 明语句3、Dim 语句 的语法4、Activate 方法的语法5、Set 语句6、MsgBox 函数的语法7、选项语句的语法8、AddressOf 运算符9、了解变体10、写赋值语句11、写可执行的语句12、Public 语句13、Private 语句14、使用数组15、使用常数16、AppActivate 语句17、Beep 语句19、Da te 语句20、Error 语句 21、Exit 语句22、GoSub.Return 语句 23、GoTo 语句 24、Input # 语句 25、Let 语句 26、Loa

6、d 语句 27、Name 语句 28、On.GoSub、On.GoTo 语句 29、Open 语句 30、Rem 语句 31、Stop 语句 32、Time 语句 33、While.Wend 语句 (二)逻 辑语句1、If.Then.Else 语句2、使用 Select Case 语句3、使用 For.Next 语句4、For Each.Next 语句5、 Do.Loop 语句6、 With 语句(三)过程1、写 Sub 过程2、写 Function 过程3、写 Property 过程四、 Activ eX 控件1、AfterUpdate 事件2、 Click 事件3、Click 事件、命令按

7、钮控件、Accelerator 和 Caption 属性示例.4、DblClick 事件5、Error 事件6、KeyDown 和 KeyUp 事件7、 KeyPress 事件8、KeyPress 事件示例9、MouseDown 和 MouseUp 事件10、 MouseMove 事件11、列表框控件12、 SpinDown 和 SpinUp 事件13、SpinDown、SpinUp 事件和 Delay 属性示例14、组合框控件15、命令按钮控件16、标签 控件17、列表 框控件、DataObject 对象、MouseMove 事件和 StartDrag、SetText 方法示例18、多页控件

8、19、选项按钮控件20、文本框控件21、切换按钮控件22、 用户窗体窗口.一、VBA 入门知识1、激活工作簿用 Activate 方法激活工作簿后,该工作簿将放在活动窗口中。下述过程激活已打开的工作簿“MyBook.xls”。Sub MakeActive()Workbooks(“MyBook.xls“).ActivateEnd Sub2、创建新工作簿如果要用 Visual Basic 创建新的工作簿,应使用 Add 方法。下述过程创建了新工作簿。Microsoft Excel 自动将该工作簿命名为“Book N”,其中 N 是下一个可用的数字。新工作簿将成为活动工作簿。Sub AddOne()

9、Workbooks.AddEnd Sub创建新工作簿的较好的方法是将其赋给一个对象变量。下例中,由 Add 方法返回的 Workbook 对象赋给了对象变量 newBook。然后,又设置了 newBook 的若干属性。使用对象变量可以很容易地控制新工作簿。Sub AddNew()Set newBook = Workbooks.AddWith newBook.Title = “1995 Sales“.Subject = “Sales“.SaveAs filename:=“95Sales.xls“End WithEnd Sub3、打开工作簿用 Open 方法打开一个工作簿时,该工作簿将成为 Wor

10、kbooks 集合的成员。下述过程打开 C 盘上“MyFolder”文件夹内的工作簿“MyBook.xls”。Sub OpenUp()Workbooks.Open(“C:MyFolderMyBook.xls“)End Sub4、用编号引用工作表编号是赋予工作表的连续的数字,这些数字的顺序,是根据同一类型的工作表的标签位置按由左而右的顺序确定的。下述过程使用 Worksheets 属性激活活动工作簿上的第一张工作表。Sub FirstOne()Worksheets(1).ActivateEnd Sub如果要处理所有类型的工作表(工作表、图表、模块表和对话框编辑表),可用 Sheets 属性。下述

11、过程激活工作簿中的第四张工作表。Sub FourthOne()Sheets(4).ActivateEnd Sub注意 移动、添加或删除工作表时,编号顺序将会改变。5、用名称引用工作表使用 Worksheets 属性和 Charts 属性时,可用名称标识工作表。下述语句激活活动工作簿内的不同工作表。Worksheets(“Sheet1“).ActivateCharts(“Chart1“).ActivateDialogSheets(“Dialog1“).Activate可用 Sheets 属性返回工作表、图表、模块表或对话框编辑表;Sheets 集合包含了所有这些表。下例激活活动工作簿内的图表“C

12、hart1”。Sub ActivateChart()Sheets(“Chart1“).ActivateEnd Sub注意 嵌入到工作表上的图表是 ChartObjects 集合的成员,而那些位于单独的表上的图表则属于 Charts 集合。6、将文档保存为 Web 页在 Microsoft Excel 2000 中,可以将工作簿、工作表、图表、区域、查询表、数据透视表报表、打印区域或自动筛选区域保存到 Web 页中。也可以直接在 Excel 中编辑 HTML 文件。将文档保存为 Web 页将文档保存为 Web 页是一个创建并保存 HTML 文件及其支持文件的过程。要完成此过程,可使用 SaveA

13、s 方法,如下例所示,此示例将活动工作簿保存为文件“C:Reportsmyfile.htm”。ActiveWorkbook.SaveAs _Filename:=“C:Reportsmyfile.htm“, _FileFormat:=xlHTML自定义 Web 页.通过设置 DefaultWebOptions 对象和 WebOptions 对象的属性,用户可以自定义 HTML 文档的外观、内容、浏览器支持、编辑支持、图形格式、屏幕分辨率、文件组织和编码。DefaultWebOptions 对象中包含应用程序级别的属性。而任何具有相同名称的工作簿级别的设置(包含在 WebOptions 对象中)会

14、覆盖这些设置。设置完属性后,可以使用 Publish 方法将工作簿、工作表、图表、区域、查询表、数据透视表报表、打印区域或自动筛选区域保存到 Web 页中。下例设置了一些应用程序级别的属性,然后又设置了活动工作簿的 AllowPNG 属性,而此设置将覆盖应用程序级别的默认设置。最后,本示例将该区域保存为“C:Reports1998_Q1.htm”。With Application.DefaultWebOptions.RelyonVML = True.AllowPNG = True.PixelsPerInch = 96End WithWith ActiveWorkbook.WebOptions.

15、AllowPNG = FalseWith .PublishObjects(1).FileName = “C:Reports1998_Q1.htm“.PublishEnd WithEnd With也可以直接将文件保存到 Web 服务器上。下例将一个区域保存到 Web 服务器上,假定该 Web 页的 URL 地址为 http:/ ActiveWorkbookWith .WebOptions.RelyonVML = True.PixelsPerInch = 96End WithWith .PublishObjects(1).FileName = _“http:/ WithEnd With在 Micr

16、osoft Excel 中打开 HTML 文档要在 Excel 中编辑 HTML 文档,请首先使用 Open 方法打开该文档。下例打开文件“C:Reports1997_Q4.htm”以便进行编辑。Workbooks.Open Filename:=“C:Reports1997_Q4.htm“打开文件后,就可以通过设置 DefaultWebOptions 和 WebOptions 对象的属性自定义该 HTML 文档的外观、内容、浏览器支持、编辑支持、图象格式、屏幕分辨率、文件组织和编码。7、用 A1 样式的记号引用单元格和单元格区域可在 Range 方法中以 A1 样式的记号引用单元格和单元格区域

17、。下述 Sub 过程将单元格区域 A1:D5 的字体设置为加粗。Sub FormatRange()Workbooks(“Book1“).Sheets(“Sheet1“).Range(“A1:D5“) _.Font.Bold = TrueEnd Sub 下表演示了用于 Range 方法的一些 A1-样式的引用。引用 含义Range(“A1“) 单元格“A1”Range(“A1:B5“) 从单元格“A1”到单元格“B5”的区域Range(“C5:D9,G9:H16“) 多块的选定区域Range(“A:A“) “A”列Range(“1:1“) 第一行Range(“A:C“) 从“A”列到“C”列的区

18、域Range(“1:5“) 从第一行到第五行的区域Range(“1:1,3:3,8:8“) 第 1、3 和 8 行Range(“A:A,C:C,F:F“) “A”列、 “C”列和“F”列8、用编号引用单元格.可用 Cells 属性及行号和列标引用单个单元格。该属性返回代表单个单元格的 Range 对象。下例中,Cells(6,1) 返回工作表“Sheet1”上的单元格“A6”,然后将 Value 属性设置为 10。Sub EnterValue()Worksheets(“Sheet1“).Cells(6, 1).Value = 10End Sub因为可用变量代入单元格索引值,所以 Cells 属

19、性非常适于在单元格区域中循环,如下例所示。Sub CycleThrough()Dim counter As IntegerFor counter = 1 To 20Worksheets(“Sheet1“).Cells(counter, 3).Value = counterNext counterEnd Sub注意 如果要同时对某一区域内的所有单元格修改属性或应用方法,可用 Range 属性。有关的详细内容,请参阅“用 A1 样式的记号引用单元格和单元格区域”。9、引用行或列可用 Rows 属性或 Columns 属性处理整行或整列。这两个属性返回代表单元格区域的 Range 对象。下例中,用

20、Rows(1) 返回工作表“Sheet1”上的第一行,然后将该行的 Font 对象的 Bold 属性设置为 True。Sub RowBold()Worksheets(“Sheet1“).Rows(1).Font.Bold = TrueEnd Sub下表演示了使用 Rows 属性和 Columns 属性的一些行和列的引用。引用 含义Rows(1) 第一行Rows 工作表上所有的行Columns(1) 第一列Columns(“A“) 第一列Columns 工作表上所有的列如果要同时处理若干行或列,可先创建一个对象变量,然后用 Union 方法把对 Rows 属性或 Columns 属性的多个调用组

21、合起来。下例将活动工作簿中第一张工作表上的第一行、第三行和第五行的字体设置为加粗。Sub SeveralRows()Worksheets(“Sheet1“).ActivateDim myUnion As RangeSet myUnion = Union(Rows(1), Rows(3), Rows(5)myUnion.Font.Bold = TrueEnd Sub10、用快捷记号引用单元格可用方括号将 A1 样式的引用或命名区域的名称括起来,作为 Range 属性的快捷方式。这样就不必键入“Range”和引号,如下述各例所示。Sub ClearRange()Worksheets(“Sheet1

22、“).A1:B5.ClearContentsEnd SubSub SetValue()MyRange.Value = 30End Sub11、引用命名单元格区域用名称比用 A1 样式的记号更容易标识单元格区域。如果要命名选定的单元格区域,单击公式栏左端的名称框,键入名称,然后按 ENTER 键。引用命名单元格区域下例引用了工作簿“MyBook.xls”中的单元格区域“MyRange”。Sub FormatRange()Range(“MyBook.xls!MyRange“).Font.Italic = TrueEnd Sub下例在工作簿“Report.xls”中引用了特定于工作表的单元格区域“S

23、heet1!Sales”。Sub FormatSales()Range(“Report.xlsSheet1!Sales“).BorderAround weight:=xlthinEnd Sub如果要选定命名的单元格区域,可用 GoTo 方法,该方法将激活指定区域所在的工作簿和工作表,然后选定该区域。Sub ClearRange().Application.Goto Reference:=“MyBook.xls!MyRange“Selection.ClearContentsEnd Sub下例显示了在活动工作簿中对上述同一过程的写法。Sub ClearRange()Application.Goto

24、 Reference:=“MyRange“Selection.ClearContentsEnd Sub在命名区域中的单元格上循环下例用 For Each.Next 循环语句在命名区域中的每一个单元格上循环。如果该区域中的任一单元格的值超过 limit 的值,就将该单元格的颜色改为黄色。Sub ApplyColor()Const limit As Integer = 25For Each c In Range(“MyRange“)If c.Value limit Thenc.Interior.ColorIndex = 27End IfNext cEnd Sub12、按相对于其他单元格的方式来引用

25、单元格处理位于相对于其他单元格的某一位置单元格的常用方法是使用 Offset 属性。下例中,将位于活动工作表上活动单元格下一行和右边三列的单元格的内容设置为双下划线。Sub Underline()ActiveCell.Offset(1, 3).Font.Underline = xlDoubleEnd Sub注意 可用 Offset 属性而不用绝对引用方式来记录宏。指向“工具”菜单内的“录制宏”子菜单,然后单击“使用相对引用”命令即可。如果要在单元格区域中循环,可在循环中将 Cells 属性和变量共用。下例用从 5 到 100 的值以 5 为步长填充第三列的前 20 个单元格。变量 counte

26、r 用作 Cells 属性的行号。Sub CycleThrough()Dim counter As IntegerFor counter = 1 To 20Worksheets(“Sheet1“).Cells(counter, 3).Value = counter * 5Next counterEnd Sub13、用 Range 对象引用单元格将对象变量设置为 Range 对象,即可用变量名方便地操纵该单元格区域。下述过程创建了对象变量 myRange,然后将活动工作簿中工作表“Sheet1”上的单元格区域“A1:D5”赋予该变量。随后的语句用该变量代替该区域对象,以修改该区域的属性。Sub

27、Random()Dim myRange As RangeSet myRange = Worksheets(“Sheet1“).Range(“A1:D5“)myRange.Formula = “=RAND()“myRange.Font.Bold = TrueEnd Sub14、引用工作表上的所有单元格如果对工作表应用 Cells 属性时不指定索引,该属性将返回代表工作表上所有单元格的 Range 对象。下述 Sub 过程清除活动工作簿中工作表“Sheet1”上的所有单元格的内容。Sub ClearSheet()Worksheets(“Sheet1“).Cells.ClearContentsEnd

28、 Sub15、引用若干单元格区域使用适当的方法可以很容易地同时引用若干单元格区域。可用 Range 和 Union 方法引用任意组合的单元格区域;用 Areas 属性可引用工作表上选定的一组单元格区域。使用 Range 属性使用 Range 属性时,在两个或多个引用之间加上逗号,就可以引用多重区域。下例清除了工作表“Sheet1”上三个单元格区域的内容。Sub ClearRanges()Worksheets(“Sheet1“).Range(“C5:D9,G9:H16,B14:D18“). _ClearContentsEnd Sub命名区域使得用 Range 属性处理多重区域更为容易。下例可在三

29、个命名区域处于同一工作表时运行。.Sub ClearNamed()Range(“MyRange, YourRange, HisRange“).ClearContentsEnd Sub使用 Union 方法用 Union 方法可将多个单元格区域组合到一个 Range 对象中。下例创建了名为 myMultipleRange 的 Range 对象,并将其定义为单元格区域“A1:B2”和“C3:D4”的组合,然后将该组合区域的字体设置为加粗。Sub MultipleRange()Dim r1, r2, myMultipleRange As RangeSet r1 = Sheets(“Sheet1“).

30、Range(“A1:B2“)Set r2 = Sheets(“Sheet1“).Range(“C3:D4“)Set myMultipleRange = Union(r1, r2)myMultipleRange.Font.Bold = TrueEnd Sub使用 Areas 属性可用 Areas 属性引用选定的单个单元格区域或多块的选定区域集合。下述过程计算选定区域内的块数目,如果选定区域中有多个块,就显示警告消息。Sub FindMultiple()If Selection.Areas.Count 1 ThenMsgBox “Cannot do this to a multiple selec

31、tion.“End IfEnd Sub16、在单元格区域中循环使用 Visual Basic 时,经常需要对某一区域内的每个单元格运行同一段语句。为达到这一目的,可将循环语句和标识每个单元格的一个或多个方法组合使用,每循环一次,就对一个单元格执行一次操作。在单元格区域中循环的一种方法是使用 For.Next 循环语句和 Cells 属性。使用 Cells 属性时,可用循环计数器(或其他变量或表达式)作为单元格编号。下例中,变量 counter 代替了行号。此过程将在单元格区域“C1:C20”中循环,将所有绝对值小于 0.01 的数字都设置为 0(零)。Sub RoundToZero1()For

32、 counter = 1 To 20Set curCell = Worksheets(“Sheet1“).Cells(counter, 3)If Abs(curCell.Value) 1 ThenMsgBox “You cannot carry out this command “ & _“on multi-area selections“End IfEnd Sub10、Rows 属性.Application 对象:返回一个 Range 对象,此对象代表当前工作表的所有行。如果当前文档不是工作表, Rows 属性无效。只读。Range 对象:返回一个 Range 对象,此对象代表指定区域中的所

33、有行。只读。Worksheet 对象: 返回一个 Range 对象,此对象代表指定工作表中的所有行。只读。有关返回一个集合中单个成员的详细内容,请参阅返回集合中的对象。说明在不用对象识别符的情况下使用此属性等价于 ActiveSheet.Rows。当应用于多选区域的 Range 对象时,该属性只返回该范围中第一个区域的行。例如,如果 Range 对象有两个 areas A1:B2 和 C3:D4 Selection.Rows.Count 返回 2 而不是 4。 要在一个可能包含多选区域的范围时,利用Areas.Count 来判断该范围是否包含多个选择区域。如果是,则象第 3 个示例中所示,在该

34、范围中的每个区域循环。Rows 属性示例本示例删除 Sheet1 的第三行。Worksheets(“Sheet1“).Rows(3).Delete本示例检查工作表一当前区域中的行,如果某行的第一个单元格值与前一行的第一个单元格的值相等,则删除此行。For Each rw In Worksheets(1).Cells(1, 1).CurrentRegion.Rowsthis = rw.Cells(1, 1).ValueIf this = last Then rw.Deletelast = thisNext本示例显示 Sheet1 选定区域的行数。如果是多重选定区域,本示例将对每一个子区域进行循环

35、。Worksheets(“Sheet1“).ActivateareaCount = Selection.Areas.CountIf areaCount = 1 ThenMsgBox “The selection contains “ & _Selection.Rows.Count & “ rows.“Elsei = 1For Each a In Selection.AreasMsgBox “Area “ & i & “ of the selection contains “ & _a.Rows.Count & “ rows.“i = i + 1Next aEnd If11、Activate 事

36、件激活一个工作簿、工作表、图表或嵌入式图表时产生此事件。语法Private Sub object_Activate()object Chart、Workbook、或者 Worksheet。有关使用 Chart 对象的事件的详细内容,请参阅嵌入式图表事件的用法。说明切换两个显示同一工作簿的窗口时,将产生 WindowActivate 事件,但不产生工作簿的 Activate 事件。新建窗口时不产生本事件。Activate 事件示例本示例当激活工作表时对 A1:A10 区域进行排序。Private Sub Worksheet_Activate()Range(“a1:a10“).Sort Key1:

37、=Range(“a1“), Order:=xlAscendingEnd SubActivate 方法示例本示例激活工作表“Sheet1”。Worksheets(“Sheet1“).Activate本示例选定工作表“Sheet1”中的单元格区域“A1:C3”,并激活单元格“B2”。Worksheets(“Sheet1“).ActivateRange(“A1:C3“).SelectRange(“B2“).Activate本示例激活工作簿 Book4.xls。如果工作簿 Book4.xls 有若干窗口,本示例激活第一个,即 Book4.xls:1。Workbooks(“BOOK4.XLS“).Act

38、ivate12、Activate、 Deactivate 事件在对象变成活动窗口的时候就会发生 Activate 事件。而当对象不再是活动窗口时,则会发生 Deactivate 事件。语法Private Sub object_Activate()Private Sub object_Deactivate().object 代表一个对象表达式,其值为“应用于”列表中的对象。说明对象可使用代码中的 Show 方法变成活动的。只有在对象是可见的时候才会发生 Activate 事件。除非使用 Show 方法,否则用 Load 加载的 UserForm 是不可见的。只有在应用程序中移动焦点时才会发生 A

39、ctivate 及 Deactivate 事件。而将焦点移出或移动到另一个应用程序中的对象并不会触发此事件。在卸载对象时,并不会发生 Deactivate 事件。13、Activate 方法激活对象,如下表所示。对象 说明Chart,ChartObject 使该图表成为活动图表。Worksheet 使该工作表成为活动工作表。等同于单击工作表的选项卡。OLEObject 激活对象。Pane 激活窗格。如果该窗格不在活动窗口,则该窗格所属的窗口也将激活。不能激活冻结的窗格。Range 激活单个单元格,该单元格必须处于当前选定区域内。可用 Select 方法选定单元格区域。Window 将窗口提到

40、Z-次序的最前面。这样不会引起可能附加在工作簿上的 Auto_Activate 或 Auto_Deactivate 宏的运行(可用 RunAutoMacros 方法运行这些宏) 。Workbook 激活与该工作簿相关的第一个窗口。这样不会引起可能附加在工作簿上的 Auto_Activate 或 Auto_Deactivate 宏的运行(可用 RunAutoMacros 方法运行这些宏) 。语法expression.Activateexpression 必选。该表达式返回“应用于”列表中的对象。14、WorkbookActivate 事件当激活任一工作簿时产生此事件。语法Private Sub

41、app_WorkbookActivate(ByVal Wb As Workbook)app 在类模块中带有事件声明的 Application 类型对象。有关详细内容,请参阅 Application 对象事件的用法。Wb 激活的工作簿。WorkbookActivate 事件示例本示例当激活一个工作簿时对所有打开的窗口进行排列。Private Sub App_WorkbookActivate(ByVal Wb As Workbook)Application.Windows.Arrange xlArrangeStyleTiledEnd Sub工作簿的窗口激活时,将产生本事件。语法Private Su

42、b object_WindowActivate(ByVal Wb As Excel.Workbook, ByVal Wn As Excel.Window)object Application 对象或 Workbook 对象。有关 Application 对象事件用法的详细内容,请参阅 Application 对象事件的用法。Wb 仅用于 Application 对象。显示在活动窗口中的工作簿。Wn 激活的窗口。15、WindowActivate 事件示例本示例使工作簿窗口激活时最大化。Private Sub Workbook_WindowActivate(ByVal Wn As Excel.W

43、indow)Wn.WindowState = xlMaximizedEnd Sub16、On Error 语句启动一个错误处理程序并指定该子程序在一个过程中的位置;也可用来禁止一个错误处理程序。语法On Error GoTo lineOn Error Resume NextOn Error GoTo 0On Error 语句的语法可以具有以下任何一种形式:语句 描述On Error GoTo line 启动错误处理程序,且该例程从必要的 line 参数中指定的 line 开始。 line 参数可以是任何行标签或行号。如果发生一个运行时错误,则控件会跳到 line, 激活错误处理.程序。指定的

44、line 必须在一个过程中,这个过程与 On Error 语句相同; 否则会发生编译时间错误。On Error Resume Next说明当一个运行时错误发生时,控件转到紧接着发生错误的语句之后的语句,并在此继续运行。访问对象时要使用这种形式而不使用 On Error GoTo。On Error GoTo 0禁止当前过程中任何已启动的错误处理程序。说明如果不使用 On Error 语句,则任何运行时错误都是致命的;也就是说,结果会导致显示错误信息并中止运行。一个“允许的”错误处理程序是由 On Error 语句打开的一个处理程序;一个“活动的”错误处理程序是处理错误的过程中允许的错误处理程序。

45、如果在错误处理程序处于活动状态时(在发生错误和执行 Resume、Exit Sub、Exit Function 或 Exit Property 语句之间这段时间)又发生错误,则当前过程的错误处理程序将无法处理这个错误。控件返回调用的过程。如果调用过程有一个已启动的错误处理程序,则激活错误处理程序来处理该错误。如果调用过程的错误处理程序也是活动的,则控件将再往回传到前面的调用过程,这样一直进行下去,直到找到一个被允许的但不是活动的错误处理程序为止。如果没有找到被允许而且不活动的错误处理程序,那么在错误实际发生的地方,错误本身是严重的。错误处理程序每次将控件返回调用过程时,该过程就成为当前过程。在

46、任何过程中,一旦错误处理程序处理了错误,在当前过程中就会从 Resume 语句指定的位置恢复运行。注意 一个错误处理程序不是 Sub 过程或 Function 过程。它是一段用行标签或行号标记的代码。错误处理程序依靠 Err 对象的 Number 属性中的值来确定错误发生的原因。在其它任何错误发生之前,或在调用一个可能会导致错误发生的过程之前,错误处理程序应该先测试或存储 Err 对象中相关的属性值。Err 对象中的属性值只反映最近发生的错误。Err.Description 中包含有与 Err.Number 相关联的错误信息。On Error Resume Next 会使程序从紧随产生错误的语

47、句之后的语句继续执行,或是从紧随最近一次调用含有 On Error Resume Next 语句的过程的语句继续运行。这个语句可以置运行时错误于不顾,使程序得以继续执行。可以将错误处理程序放置在错误发生的地方,而不必将控件传输到过程中的其它位置。在调用另一个过程时,On Error Resume Next 语句成为非活动的,所以,如果希望在例程中进行嵌入错误处理,则应在每一个调用的例程中执行 On Error Resume Next 语句。注意 当处理在访问其它对象期间产生的错误时,与其使用 On Error GoTo 指令,不如使用 On Error Resume Next。每次和对象打交道

48、,在不知道用代码访问哪个对象时,检查一下 Err 都会打消这种疑虑。可以确定是哪个对象产生错误(Err.Source 中指定的对象),也可以确定是哪个对象将错误代码放在 Err.Number 中。On Error GoTo 0 停止在当前过程中处理错误。即使过程中包含编号为 0 的行,它也不把行 0 指定为处理错误的代码的起点。如果没有 On Error GoTo 0 语句,在退出过程时,错误处理程序会自动关闭。在错误未发生的时候,为了防止错误处理程序代码运行,请像在下段程序中那样,在紧靠着错误处理程序的前面写入 Exit Sub、Exit Function 或 Exit Property 语

49、句。Sub InitializeMatrix(Var1, Var2, Var3, Var4)On Error GoTo ErrorHandler. . .Exit SubErrorHandler:. . .Resume NextEnd Sub此处,错误处理程序代码在 Exit Sub 语句之后,而在 End Sub 语句之前,从而与过程中的流程分开。错误处理程序代码可以在程序中的任何地方写入。当对象作为文件运行时,对象中未捕获的错误都被返回控制应用程序。在开发环境中,如果设置了正确选项,未捕获的错误只返回控制应用程序。请参考主应用程序的文档的有关描述,从而得知,在调试时应该设置哪些选项、如何设置这些选项以及主机能否建立类。如果建立一个访问其它对象的对象,则应该着手处理从那些对象返回的未处理错误。如果无法处理这种错误,请将 Err.Number 中的错误代码当作自己的一个错误,然后将错误回传给对象的调用者。应该将错误代码添加到 vbObjectError 常

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 教育学

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报