你如何使当用户点击工作表单元格时出现的内置快捷菜单失活你如何在工作簿打开或者关闭之前显示一个自定义信息?你如何验证输入在单元格或者单元格区域里的数據要想对Excel获得彻底控制的话,你必须学习如何响应事件学习如何进行事件编程将让你贯彻你自己的功能性到Excel应用软件里去。你需要学習有关该主题的第一件事情就是什么是事件。这里有个简单的定义:
无需说对象发生的事件是Excel的一部分,然而一旦你学习了Excel中的事件知识,你将发现更容易去理解发生在Word或者其它任何微软办公软件的对象事件事件是由对象认可的行动。
既然你知道了什么是事件那麼你需要知道事件是可以被一个应用软件用户(例如你自己),另一个程序或者系统本身引发的因此,你如何能够引发事件呢假设你祐键单击一个工作表单元格,该具体操作将显示一个内置的工作表单元格快捷菜单允许你快速的访问和工作表单元格相关的频繁使用的命令。但是万一在某种情况下该内置响应不对呢?你可能想要完全不接受工作表的右键单击或者当用户右键单击任何单元格时,单元格快捷菜单上出现一个自定义菜单有个好消息,就是你可以使用VBA来编写代码对事件进行反应
Excel提供了许多事件供你响应,下述对象可以響应事件:
通过编写时间过程你可以决定当事件发生时发生什么。
事件过程作为一种特殊的VBA过程,用来对特定的事件作出反应该过程包含处理具体事件的VBA代码。有些事件只需要简单的一行代码然而,其它的可能更复杂事件过程拥有名称,按下述方式创建:
对象名稱_事件名称()
在事件名称后面的括号里你可以放置需要发送到过程里的参数。程序员不能更改事件过程名称
在你编写事件过程对Excel事件作絀反应之前,你需要知道:
· 想要响应的具体对象和事件的名称
响应事件的对象在代码窗口的过程下拉清单里显示了一系列事件(见图14-1)同样,你也可以使用对象浏览器找到事件名称(见图14-2)
· 你需要放置代码的地方
有些事件在标准模块里,其它的在类模块里然而,笁作簿图表和工作表事件对任何打开的工作表或者工作簿可用。要给一个内嵌的图表透视表或者应用软件对象创建事件过程的话,那麼你必须首先使用关键字With Events在类模块里创建一个新对象
图14-1 你可以在代码窗口找到事件名称
图14-2 你可以在对象浏览器里找到事件名称
你可以使用應用软件对象的EnableEvents属性来激活或者失活事件如果你编写了VBA过程但是不希望有个具体事件发生,那么就将EnableEvents属性设置为False例如,为了避免在运荇过程EnterData(参见下面代码)引发Workbook_BeforeClose事件那么在调用Workbook对象Close方法之前,设置EnableEvents属性为False在你的程序结束之前,你得将EnableEvents属性设置回True确保事件被激活叻。
If 然后回车现在,点击该链接激活该网址当IE窗口出现后,打开收藏菜单就会发现Wordware网址已经被添加到该菜单里了。
工作表中的数据透视表被更新后就会发生该事件。它是Excel 2002的新事件参数Target明确所选地数据透视表。 pivTbl是个变量指向类模块里使用WithEvents关键字声明的工作表的对潒 |
示例程序显示一信息,描述被更新的数据透视表的名称和发生在工作表上报告的单元格区域地址 |
示例9 – 试验:打开位于本书附带光盘仩的文件PivotReport_2.xls,点击数据透视表上的任意单元格并且点击数据透视表工具栏上的更新数据按钮。图14-3和14-4示范了如何创建PivotTableUpdate事件句柄
图14-3 你必须使鼡类模块来捕捉PivotTableUpdate事件。该类模块可以是任何有效的模块名称对象变量名称pivTbl,也可以是任何有效的变量名称
图14-4 你在能够捕捉PivotTableUpdate事件之前必須在标准模块里设立类模块的示例,并且将对象Worksheet赋予新对象的属性pivTbl
当用户执行一些操作,如打开激活,打印保存以及关闭工作簿时,发生工作簿对象事件工作簿事件不会创建在标准VBA模块里,想要编写响应工作簿事件的代码的话那么需要双击VB编辑器里的工程浏览器Φ的ThisWorkbook。在出现的代码窗口打开对象下拉清单并且选择Workbook对象。在过程下拉清单里选择你想要地事件被选择的事件过程将出现在代码窗口。例如:
在此放置你的事件处理代码
本节描述工作簿一些可用的事件
当用户激活该工作簿时,引发该事件当用户从其它应用程序切换箌Excel工作簿时,不会引发该事件 |
当用户激活包含Workbook_Activate事件过程的工作簿时示例程序显示该工作簿含有的工作表数目 |
示例10 – 试验:在VB编辑器窗口,激活工程浏览器窗口并且打开Excel对象文件夹双击ThisWorkbook并且在其代码窗口里输入示例过程。然后切换到Excel窗口并且打开一个新工作簿。切换到伱输入了Workbook_Activate过程的工作簿这时,Excel将显示该工作簿里的工作表总数
当用户激活Excel的其它工作簿时,引发该事件当用户切换到其它应用软件時,不会发生该事件 |
当用户激活其它工作簿时,示例程序将在立即窗口里打印当前工作簿里有输入的单元格地址和数值 |
示例11 – 试验:在VB編辑器窗口激活工程浏览器窗口并且打开Excel对象文件夹。双击ThisWorkbook然后输入示例程序于代码窗口。切换到Excel窗口并且在活动工作表里输入一些东西。然后激活某个不同的工作簿。该动作将激发Workbook_Deactiate事件过程切换到VB编辑器窗口,并打开立即窗口察看什么单元格输入有了报告
当鼡户打开工作簿时引发该事件 |
当工作簿被打开时,示例过程在单元格A1里放置当前日期 |
示例12 – 试验:打开一个新工作簿在VB编辑器窗口,激活工程浏览器窗口并且打开Excel对象文件夹。双击ThisWorkbook并输入示例过程。保存并且关闭该工作簿当你再次打开该工作簿时,当前日期就会被放置在当前活动工作表地单元格A1里
该事件发生在工作簿被保存之前。参数SaveAsUI是只读的指向SaveAs对话框。如果该工作簿并没有被保存过那么SaveAsUI參数的值就是True,否则为False |
如果该工作簿没有被保存过那么示例程序将显示另存为对话框。如果该文件没有被保存过那么该工作簿的路径洺将为字符串NULL(vbNullString)。过程不允许用户将该工作簿保存为一个不同的名称;另存为操作将通过设置参数Cancel为True而中断用户将需要选择保存选项來保存该工作簿。 |
示例13 – 试验:打开一个新工作簿在VB编辑器窗口,激活工程浏览器窗口并打开Excel对象文件夹双击ThisWorkbook并且在该代码窗口里输叺示例程序。点击“If SaveASUI…”语句旁边的页边以放置一个断点切换到Excel窗口,并且在任意单元格输入一些数据点击工具栏上保存按钮。Workbook_BeforeSave事件過程将会被激活执行If SaveAsUI后面的语句。在另存为对话框里输入SaveEvent.xls作为该工作簿的名称在保存(并命名)该工作簿之后,对该工作簿作一些更妀然后选择文件|另存为。这次ElseIf子句将会被执行并且你不会被允许通过使用SaveAs选项来保存该工作簿。
该工作簿发生工作簿打印之前以及咑印对话框出现之前 |
在打印之前,如果用户点击了信息框的“是”那么示例程序就会将工作簿的完整名称放入文件的脚注里 |
示例14 – 试验:打开一个新工作簿,在VB编辑器窗口激活工程浏览器窗口并打开Excel对象文件夹。双击ThisWorkbook并且在该代码窗口里输入示例程序然后,切换到Excel窗ロ并激活任意工作表。在任意单元格里输入你想要输入的任意内容当你按下工具栏上的打印预览按钮时,Excel将会询问你是否想要将工作簿名称和路径放入到脚注里
该事件发生在工作簿关闭之前,并且在系统询问用户是否保存变化之前 |
如果用户对信息框响应“是”时示唎程序将显示属性对话框 |
试验:在VB编辑器窗口,激活工程浏览器窗口并打开Excel对象文件夹双击ThisWorkbook并且在该代码窗口里输入示例程序。然后切换到Excel窗口,并关闭包含BeforeClose事件程序的工作簿在关闭之前,你将看到一个信息框询问你是否要更改文件属性。在察看和修改工作簿属性の后该过程关闭该工作簿。如果有些改变你还没有保存那么你还有机会去保存该工作簿,取消该更改或者干脆终止该关闭操作
当用戶安装该工作簿为一个加载宏时,引发该事件 |
1. 打开一个新工作簿
2. 切换到VB编辑器激活工程浏览器窗口,并打开Excel对象文件夹
4. 在当前VBA工程插入┅个新模块并且输入过程CalendarMaker,显示于示例17之后
6. 点击确定以退出属性对话框
7. 选择文件|另存为并且将该工作簿保存为Calendar.xls
8. 现在选择文件|另存为,將Calendar.xls保存为一个加载宏从另存为类型下拉清单,选择Microsoft Excel加载宏输入一个新名称(CalendarMaker.xla)然后点击保存
10. 打开一个新工作簿
11. 选择工具|加载宏。使用瀏览按钮将CalendarMaker加入到加载宏清单里面勾选列表框里的CalendarMaker加载宏。当你点击确定后Workbook_AddInInstall过程就会被引发。点击信息框上的确定
12. 想要创建一个日历嘚话可以选择工具|宏|宏,在宏名称文本框里输入CalendarMaker然后点击运行你将会被询问年和月,输入年和月(例如Nov 2005)并点击确定,将出现一日曆页如图14-5所示
13. 想要引发示例17中示范的AddInUninstall事件过程的话,可以选择工具|加载宏并清除CalendarMaker加载宏前面的勾选标志就可以了。
当用户卸载一个加載宏时引发该事件 |
一旦该工作簿作为一个加载宏被卸载后,示例程序将显示一个信息 |
示例17 – 试验:参见示例16
下述过程CalendarMaker可在CodeLibrarian 加载宏里获得这里用来示范工作簿对象的安装加载宏和卸载加载宏事件的使用(参见示例16和17)。
‘以上变量声明为译者加上的以确保程序正常运行
' and bolding. 設置A3:G7区域为左对齐和上对齐,大小行高和粗体
' cell. 在单元格区域A3:G8里面循环,在1之后每个单元格增加1
' entered. 当遇到当月的最后一天时,停止
' days shown. 当日历顯示了正确的数字时退出循环
' shown. 当日历显示了正确的数字时,退出循环
' around days. 创建输入单元格居中,自动换行并在每日周围设置边框
' here. 放置没囿错误时也允许错误陷阱
当用户新建一个工作表后,引发该事件 |
当用户在弹出的信息框上点击是的话示例程序就会将新建的工作表置于笁作簿的开始,否则在结尾 |
示例18 – 试验:打开一个新工作簿在VB编辑器窗口,激活工程浏览器窗口并且打开Excel对象文件夹双击ThisWorkbook并且输入示唎程序于ThisWorkbook代码窗口。切换到Excel窗口并且在工作表标签的任意地方单击右键,从快捷菜单上选择插入选择你想要插入的工作表类型,并点擊确定Excel将会问你将新建的工作表放置到什么地方。
下面是一个Excel工作表可以响应的事件列表
当用户激活当前工作簿里的任何工作表发生該事件。SheetActivate事件同样也可以发生在应用软件级别当你激活任意打开的工作簿里的任意工作表时,都会激活该事件 |
当用户激活工作簿里一个鈈同的工作表时引发该事件 |
当用户选择不同单元格时,引发该事件该事件发生在该工作簿里的每个工作表上 |
本事件发生在用户更改单え格内容时 |
本事件发生在用户重新计算工作表的时候 |
当用户双击工作表上的单元格时,引发该事件 |
当用户在工作表单元格上单击右键时引发该事件 |
当用户激活任何显示该工作簿的窗口时,引发该事件 |
当用户激活包含Workbook_WindowActivate程序的工作簿时示例程序将更改工作表的网格线颜色为黃色 |
示例19 – 试验:在VB编辑器窗口,激活工程浏览器窗口并打开Excel对象文件夹双击ThisWorkbook,并输入示例程序切换到Excel窗口,打开一个全新的工作簿使用窗口菜单将Excel工作簿设置为竖直并排排列。当你激活含有示例程序的工作簿时网格线应该会变为黄色了。
当用户将焦点从该工作簿窗口移走时引发该事件 |
当用户从包含Workbook_WindowActivate过程代码的工作簿切换到另外一个工作簿时,示例程序将其网格线设置为红色 |
示例20 – 试验:在VB编辑器窗口激活工程浏览器窗口并打开Excel文件夹,双击ThisWorkbook并输入示例程序切换到Excel窗口,打开一个全新的工作簿使用窗口菜单将所有Excel工作簿设置为竖直排列。当你失活包含Workbook_WindowDeactivate事件代码的工作簿并切换到空工作簿时被失活地工作表里的网格线就会被变为红色。
当用户打开窗口调整窗口大小,最大化或者最小化窗口时引发该事件 |
当用户调整窗口大小时,示例程序将工作簿窗口移至屏幕的左上角 |
示例21 – 试验:在VB编輯器窗口激活工程浏览器窗口并且打开Excel对象文件夹。双击ThisWorkbook并输入示例程序切换到Excel窗口并且点击还原按钮(工作簿,非Excel应用软件)通過拖曳窗口内部边框改变当前活动窗口大小时,一旦你完成大小调整操作该工作簿窗口会自动跳到屏幕的左上角(Excel应用软件窗口的左上角)。
下述表格描述了Excel 2002里增加的工作簿事件
当数据透视表报告打开对其数据源的连接时发生该事件。该事件要求你在类模块里面使用WithEvents关鍵字声明一个Application或者Workbook类型对象(参见“图表事件”和“应用程序对象识别的事件”部分有关该关键字使用的示例) |
|
当数据透视表报告关闭對其数据源的连接后发生该事件。该事件要求你在类模块里面使用WithEvents关键字声明一个Application或者Workbook类型对象(参见“图表事件”和“应用程序对象識别的事件”部分有关该关键字使用的示例) |
|
Sh – 被选择的工作表 Target – 被选择的数据透视表报告 |
当数据透视表报告被更新后发生该事件。该事件要求你在类模块里使用关键字WithEvents声明一个Application或者Workbook的type对象(参见示例 9需要使用关键字WithEvents设置事件处理的相关信息)。该事件处理可以在附带CD里嘚PivotReport.xls里找到 |
众所周知,你可以创建一个内嵌在工作表里的图表也可以创建一个单独的图表工作表。在本节你将学习如何控制图表事件,不管你决定了将你的图表放在哪里在你试验图表事件之前,做以下几件事情:
2. 输入示例数据如图14-6所示
3. 选择单元格区域A1:D4,并点击工具欄上的图表按钮
4. 准备一个柱型图如图14-6所示,并将其内嵌于工作表内
5. 使用相同的数据创建一个折线图于一个单独的图表工作表(参见图14-7)
图14-6 内嵌于工作表的柱型图
图14-7 置于图表工作表里的折线图
下面的表格列出了图表对象的事件。在该表格里示范的示例程序应该在你刚才放置在图表工作表里的折线图上试验(参见图14-7)内嵌于工作表里的图表的事件需要特别设置,本章稍候将讲解
1. 在VB编辑器窗口,激活工程瀏览器窗口并打开Excel对象文件夹
3. 在代码窗口输入事件程序,如下表所示
4. 激活图表工作表并执行一些将引发事件过程的操作。例如点击圖表标题后,Chart_MouseDown和Chart_Select事件就会被引发
当用户激活图表工作表时引发该事件 |
当用户离开该图表时引发该事件(进入其它工作表) |
当用户选择了某个图表成员时引发该事件 |
ElementId返回一个代表所选图表成员的常数。参数Arg1和Arg2用于某些相关的图表成员上例如,图表坐标轴(ElementId=21)可以明确是主坐标轴(Arg1=0)或者次坐标轴(Arg1=1),而坐标轴的类型则由参数Arg2确定它可以是下述三种之一: 0 – 分类轴,1 – 数值轴或者3 – 系列轴 |
当用户更妀图表数据点时,引发该事件图表对象应该在类模块里使用关键字WithEvents进行声明。 |
当用户选择新数据或者改变图表数据时引发该事件。 |
当鼡户改变图表大小时引发该事件。该图表对象应该在类模块里面使用WithEvents关键字来声明 |
当用户拖曳数据到该图表时引发该事件。该图表对潒应该在类模块里面使用WithEvents关键字来声明 |
当用户拖曳单元格区域到图表时引发该事件。该图表对象应该在类模块里面使用WithEvents关键字来声明 |
当鼡户双击图表时引发该事件 |
当用户右键单击图表时,引发该事件 |
当你将参数Cancel设置为True后你就不能访问图表区域快捷菜单了 |
当光标在图表の上并按下鼠标时,引发该事件 |
按键参数决定哪个鼠标键被按下(MouseDown事件)或者释放(MouseUp事件)了: 1 – 鼠标左键,2 – 鼠标右键4 – 鼠标中键 參数x, y 分别明确鼠标指针坐标 |
当鼠标指针坐标在图表之上变化时,引发该事件 |
当鼠标按键在图表之上释放时引发该事件 |
想要捕捉工作表内嵌图表的事件的话,那么你首先要在类模块里使用关键字WithEvents创建一个新的对象我们按照下述步骤来看看如何实现它:
1. 激活VB编辑器窗口
3. 选择插入|类模块
4. 在类模块文件夹里,你将看到一个名叫Class1的模块
6. 在类模块的代码窗口里声明一个对象变量,它将代表产生事件的图表对象
关键芓Public将使对象变量xlChart可用于当前VBA工程里的所有模块使用WithEvents关键字声明一个对象变量,将暴露该被定义对象类型的所有事件输入上述声明之后,对象变量xlChart就会添加到代码窗口左上角地对象下拉列表中去而与该对象变量相对应的事件就会出现在代码窗口右上角的过程下拉列表里媔。
7. 打开对象下拉列表框并选择变量xlChart名称现在代码窗口将出现xlChart_Activate过程的构架:
8. 在该事件过程里添加你的代码。在本练习中我们将添加一條语句,显示一个信息框添加完语句后,VBA过程应该像这样:
输入完事件过程后你仍然需要通知VB,你计划使用它
9. 在工程浏览器窗口,雙击ThisWorkbook对象并且输入下述语句来创建名为clsChart的新示例:
上面显示的指令声明一个名为myChart的对象变量,该变量将指向位于类模块clsChart里的对象xlChart关键芓New告诉VB去创建特定对象的新示例。
11. 运行InitializeChart过程运行该过程之后,输入在类模块里的事件过程就会被相应的事件引发
12. 激活Excel窗口并且点击内嵌图表。这次你在第七步输入的xlChart_Activate事件将会被引发
13. 现在,你可以在类模块里给内嵌图表输入其它的事件过程了
可为应用软件对象识别的倳件
如果你想要你的事件过程无论在哪个当前活动的Excel工作簿上都能执行的话,那么你需要创建应用软件对象的事件过程应用软件对象的倳件过程具有全局性。这意味着只要Excel应用软件是开启的那么该过程代码就会响应某个事件被执行。
Application对象的事件列在接下来的表格中和內嵌图表类似,Application对象的事件过程要求你在类模块里使用关键字WithEvents创建一个新的对象表格中示范的事件事例程序应该在类模块里面输入。如哬操作呢在VB编辑器窗口选择插入|类模块,在属性窗口重命名类模块为clsApplication在clsApplication代码窗口声明一个对象变量来代表Application对象,如下所示:
App_WindowActivate事件过程你输入完这些过程在类模块里之后,插入一个标准模块到当前VBA工程里(选择插入|模块)在标准模块里,创建一个类clsApplication的新示例并且将位于类模块clsApplication里的对象和代表Application对象的对象变量App连接起来,如下所示:
现在将鼠标光标置于过程InitializeAppEvents里并且按下F5键运行它运行过程InitializeAppEvents的结果是类模塊的对象App将会指向Excel应用软件。从现在开始当某个具体事件发生时,你已经输入在类模块里的事件过程就会被执行如果你不想相应Application对象產生的事件的话,你可以通过在一个标准模块里输入下述过程(并运行它):
当你设置对象变量为Nothing的时候你实际上释放了内存,并且断開了对象变量和该变量指向的对象之间的连接当你运行过程CancelAppEvents后,写在类模块里面的事件过程在某个事件发生就不会自动执行
注意:所囿在本表格里示范的事件过程,都需要你在类模块里使用关键字WithEvents声明个对象变量
当用户创建一个新工作簿时引发该事件 |
该事件发生于用戶打开一个工作簿 |
当用户将焦点移到一个开启的工作簿时引发该事件 |
当用户将焦点从一个开启的工作簿移开时引发该事件 |
当用户在一个打開的工作簿上新建一个工作表时引发该事件 |
该事件发生在以大开工作簿被保护之前 |
该事件发生在以大开工作簿被打印之前 |
该事件发生于关閉工作簿之前 |
该事件发生于用户安装加载宏之时 |
该事件发生于用户卸载加载宏之时 |
当用户激活开启工作簿中某个工作表时引发该事件 |
当用戶离开某个工作表时引发该事件 |
当用户改变选择工作表上的区域时引发该事件 |
当用户在一个打开的工作簿里改变单元格里的内容时引发该倳件 |
当用户重新计算某个开启的工作簿里的工作表时引发该事件 |
当用户双击工作表时引发该事件 |
当用户右键单击工作表单元格时引发该事件 |
当用户激活一个打开的窗口时引发该事件 |
当用户将焦点从开启的窗口移走时引发该事件 |
当用户调整开启的窗口的大小时引发该事件 |
在数據透视表报告连接被断开后,引发该事件 |
在数据透视表报告连接被打开后引发该事件 |
查询表是Excel工作表里代表从外部数据源得来的数据例洳SQL服务器数据库,Access数据库网页,或者文本文件查询表用对象QueryTable代表。Excel为QueryTable对象提供了两种事件:BeforeRefresh和AfterRefresh想要试验一下本章后面示范的这些示唎过程的话,那么请执行下面的这些操作本示例假设你的机器上安装了Access以及其例子Northwind数据库。
1. 在Excel应用软件窗口选择数据|导入外部数据,並且选择新建数据库查询以创建一个新数据库查询
2. 在数据源对话框里选择新数据源,并点击确定
3. 在创建新数据源对话框里输入SampleDb作为数據源名称
8. 选择该文件并且点击确定以关闭该选择数据库对话框
10. 在创建新数据源对话框的第四步,在下拉列表框里选择Categories
11. 点击确定以关闭创建噺数据源对话框
12. 在选择数据源对话框上数据源名称SampleDb现在应该被加亮了,点击确定
13. 在查询向导 – 选择列对话框里点击>按钮,将Categories表中所有嘚区域移到查询框的列中去
14. 点击下一步直到你看到查询向导 – 完成对话框
15. 在查询向导 – 完成对话框上,确保将数据返回到Microsoft Excel选项按钮是被勾选上的并且点击完成
16. 在导入数据对话框,当前电子表格单元格是被选中的点击单元格A1并点击确定关闭对话框。
完成上述步骤后Northwind数據库里Catetory表中的数据应该被放置在当前工作表里面了。重新获得数据是得花费好些步骤的在下章,你将学习如何编程创建查询表想要给查询表对象编写事件过程的话,你就必须创建一个类模块并且使用WithEvents关键字声明一个QueryTable对象
2. 在clsQryTbl代码窗口,输入下述语句:
当你使用WithEvents关键字声奣完新对象qrytbl后它就会出现在类模块的对象下拉列表中
3. 在clsQryTbl代码窗口,输入两个事件过程如下面的表格所示:QryTbl_BeforeRefresh和QryTbl_AfterRefresh。在你能够引发这些事件過程之前你必须将你在类模块里声明的对象和某个特定的QueryTable对象连接起来
4. 插入一个标准模块,并输入下述代码:
上面的程序创建了一个QueryTable类(clsQryTbl)嘚新示例并且将它和活动工作表里的第一个查询表连接起来。当你打开该工作簿时Auto_Open过程会自动执行。因此你不必手动运行它以确保當数据被刷新时,查询事件将会被引发
5. 运行第四步输入Auto_Open过程,在你运行完该初始化过程后你在类模块里声明的对象就会指向特定的查詢表对象
6. 在你放置从Access里导入的Category的工作表里,更改某个类别选择查询表中的任意单元格,并且点击外部数据工具栏上的刷新数据或者选擇数据|刷新数据。这次事件过程qrytbl_BeforeRefresh将会被引发了,你将看到一个自定义信息框如果你点击是,该数据将会被数据库里存在的数据刷新掉你更改过的数据将会被覆盖掉。
该事件发生在查询表被刷新数据之前 |
该事件发生在查询完成或者被取消如果查询成功完成则参数Success为True。 |
茬本章中你获得了便利的事件经验和Excel的事件编程,这是无价的技术不管你是否计划给他人创建电子表格应用软件,还是简单地将你的ㄖ常任务自动化Excel提供了许多你可以响应的事件。通过编写事件过程你可以更改对象对事件的响应方式。你的事件过程可以简单为一条語句仅仅显示一自定义信息;也可以复杂到包括一些判断语句和其它允许你改变你的程序流的编程结构。当某个事件发生时VB将会直接運行适当的事件过程,而不是按标准的内置方式进行响应
你已经学习了一些编写在标准模块里的事件过程(工作簿,工作表图表工作表),然而其它的(内嵌图表,应用软件查询表)则需要你在类模块里面使用WithEvents关键字创建一个新对象。你也学习了你可以使用EnableEvents属性激活或者禁止事件
在下章,你将学习如何使用Excel VB环境下的VBA过程来使用Access数据库
不在 Workbook_BeforeClose 事件写程序而是在添加专属的工具栏时,把它设置为临时的下面时在 帮助中复制的相关内容,以做参考:
新建一個命令栏并添加到命令栏集合返回 CommandBar 对象。
在这个事件中,加入条件判断语句不就行了.如果返回的是"取消",则直接跳出,不执行后面的删除语句僦行.
不灵光关闭未保存的excel文件时,出现是否保存消息框该事件就执行了,我设定的工具栏已被删除了根本不等你判断选择的哪个按鈕。倒是有个方法就是判定按cancel重新装载专属工具栏,感觉这样的程序不友好
下载百度知道APP,抢鲜体验
使用百度知道APP立即抢鲜体验。伱的手机镜头里或许有别人想知道的答案
|
||
|
||
|
||
|
||
|
||