Microsoft Excel 工作表 excel怎么保护工作表激活

谁能给我Microsoft Excel 2010 激活码_百度知道
谁能给我Microsoft Excel 2010 激活码
提问者采纳
office2010密钥:HV7BJ-R6GCT-VHBXD-YH4FD-GTH2T
HMYY4-TR62Q-9TT76-BDBHK-WPRPT===================================== 不行的话,继续追问,并留邮箱 我有免序列号完美激活 破解版
谢谢你 及时雨 呵呵
如果对您有帮助,望及时采纳!
提问者评价
希望激活成功
按默认排序
其他1条回答
您可能关注的推广
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁Microsoft Excel无法插入对象,怎么解决?
Microsoft Excel无法插入对象,怎么解决?
09-02-24 & 发布
用EXCEL对象读取EXCEL文件中数据.然后通过ADODB连接SQL进和导入 下面是EXCEL对象的详解 1 前言 做为一种简捷、系统的 Windows应用程序开发工具,VB具有强大的数据处理功能,提供了多种数据访问方法,可以方便地存取Microsoft SQL Server、Oracle、XBase等多种数据库,被广泛应用于建立各种信息管理系统。但是,VB缺乏足够的、符合中文习惯的数据表格输出功能,虽然使用Crystal Report控件及 Crystal Reports程序可以输出报表,但操作起来比较麻烦,中文处理能力也不理想。Excel在表格方面有着强大的功能,我们可以用VB编写直接控制Excel操作的程序,方法是用VB的OLE自动化技术获取Excel的控制句柄,从而直接控制Excel的一系列操作。本文结合自己的实践和体会,谈谈如何在VB6.0应用程序中调用Exce12000,供大家参考。 2 Excel对象模型 为了在VB应用程序中调用Excel,必须要了解Excel对象模型。Excel对象模型描述了Excel的理论结构,所提供的对象很多,涉及VB调用Excel时最可能用到的对象有:
3 调用Excel 在VB应用程序中调用Excel,实质是将Excel作为一个外部对象来引用,由Excel对象模型提供能从VB应用程序内部来程序化操纵的对象以及相关的属性、方法和事件。 3.1 在VB工程中添加对Excel类型库的引用 为了能从VB应用程序中访问Excel丰富的内部资源,使Excel应用程序运行得更快,需要在VB工程中添加对Excel类型库的引用。具体步骤如下: 1) 在VB应用程序中调用Excel,你的计算机系统中必须安装Excel。从VB5“工程”菜单中选择“引用”; 2) 在“引用”对话框中选择Excel类型库:&Microsoft Excel9.0 Object Library&; 3) 单击左边小方框,使之出现“√”符号; 4) 按“确定”退出。 3.2 引用Application对象 Application对象是Excel对象模型的顶层,表示整个Excel应用程序。在VB应用程序中调用Excel,就是使用Application对象的属性、方法和事件。为此,首先要声明对象变量: Dim VBExcel As Object 或直接声明为Excel对象: Dim VBExcel As Excel.Application 在声明对象变量之后,可用CreateObject函数或GetObject函数给变量赋值新的或已存在的Application对象引用。 1)用CreateObject函数生成新的对象引用: Set VBExcel=CreateObject (&Excel.Application&) 字符串“Excel.Application”是提供Excel应用程序的编程ID,这个变量引用Excel应用程序本身。 2)用GetO场ect函数打开已存在的对象引用: Set AppExcel=GetObject(&Temp.XLS&) 上面语句打开文件Temp.XLS。 3)Application对象常用的属性、方法 Visible属性取True或False,表明Excel应用程序是否可见。 Left,Top属性Excel窗口的位置; Height, Width属性Excel窗口的大小; WindowState属性指定窗口的状态; Quit方法,退出Microsoft Excel; Calculate方法,重新计算所有打开的工作簿、工作表或单元格。 Evaluate方法,求值数学表达式并返回结果。 3.3 使用Excel应用程序 下面分类给出其中常用的属性和方法。 1)使用工作薄 Workbook对象代表Excel应用程序中当前打开的一个工作簿,包含在Workbooks集合中。可以通过Workbooks集合或表示当前活动工作簿的Active Workbook对象访问Workbook对象。 常用的方法有: Add方法:创建新的空白工作簿,并将其添加到集合中。 Open方法:打开工作簿。 Activate方法:激活工作簿,使指定工作簿变为活动工作簿,以便作为Active Workbook对象使用。 Save方法:按当前路径和名称保存现有工作簿(如是首次保存,则将其保存到缺省名称中,如BOOK1.XLS)。 SaveAs方法:首次保存工作簿或用另一名称保存工作簿。 Close方法:关闭工作簿。 PrintOut方法:打印工作簿,语法为: PrintOut (from, To, Copies, Preview, Printer, ToFile, Collate) 可选参数: From:打印的起始页号,如省略将从起始位置开始打印。 To:打印的终止页号,如省略将打印至最后一页。 Copies:要打印的份数,如省略将只打印一份。 Preview:如果为True则Excel打印指定对象之前进行打印预览。如果为False或省略则立即打印该对象。 Printer:设置活动打印机的名称。 ToFile:如果为True则打印输出到文件。 Collate:如果为True则逐份打印每份副本。 下面语句将活动工作簿的2到5页打印3份: ActiveWorkbook.PrintOut From:=2 To 5 Copies:=3 2)使用工作表 Sheets集合表示工作簿中所有的工作表。可以通过Sheets集合来访问、激活、增加、更名和删除工作表。一个Worksheet对象代表一个工作表。 常用的属性、方法有: Worksheets属性:返回Sheets集合。 Name属性:工作表更名。 Add方法:创建新工作表并将其添加到工作簿中。 Select方法:选择工作表。 Copy方法:复制工作表。 Move方法:将指定工作表移到工作簿的另一位置。 Delete方法:删除指定工作表。 PrintOut方法:打印工作表。 示例:将C盘工作簿中的工作表复制到A盘工作簿中: Dim VBExcel As Excel.Application Set VBExcel=CreateObject(&Excel.Application&) With VBExcel Workbooks.Open &C:\Temp\Ex1.XLS& Workbooks.Open&A:\Ex2.XLS& Workbooks(&Ex1.XLS&).Sheets (&Sales&).Copy Workbooks(&Ex2.XLS&) Workbooks(&Ex2.XLS&).Save Workbooks(&Ex1.XLS&).Close Workbooks(&Ex2.XLS&).Close Quit End With 3)使用单元范围 Range对象代表工作表的某一单元格、某一行、某一列、某一选定区域或者某一三维区域。 常用的属性、方法有: Range属性:Range (arg)其中arg为A1样式符号,表示单个单元格或单元格区域。 Cells属性:Cells (row, col )(其中row为行号,col为列号)表示单个单元格。 ColumnWidth属性:指定区域中所有列的列宽。 Rowl3eight属性:指定区域中所有行的行宽。 Value属性:指定区域中所有单元格的值(缺省属性)。 Formula属性:指定单元格的公式,由A1--样式引用。 Select方法:选择范围。 Copy方法:将范围的内容复制到剪贴板。 C1earContents方法:清除范围的内容。 Delete方法:删除指定单元范围。 4)使用图表 Chart对象代表工作簿中的图表。该图表既可为嵌人式图表(包含于ChartObject对象中)也可为分立的图表工作表。 常用方法有: Add方法:新建图表工作表,返回Chart对象。 PrineOut方法:打印图表。 ChartWizard方法:修改给定图表的属性,其语法为: ChartWizard(Source, Gallery, Format, P1otBy, CategoryLabels, SeriesLabels, HasLegend, Title, CategoryTitle, ValueTitle, ExtraTitle) 其中: Source:包含新图表的源数据的区域。如省略,将修改活动图表工作表或活动工作表中处于选定状态的嵌人式图表。 Gallery:图表类型,其值可为下列常量之一:xlArea, x1Bar, xlColumn, xlLine, x1Pie, xlRadar,x1XYScatter, xlCombination, x13DArea, x13Dbar,x13DColumn, x13DLine, x13Dpie,x13 Dsurface,xlDoughnut或xlDefaultAutoFormat。 Format:内置自动套用格式的编号。如省略,将选择默认值。 P1otBy:指定系列中的数据是来自行(xlRows)还是列(xlColumns)。 CategoryLabels:表示包含分类标志的源区域内行数或列数的整数。 SeriesLabels:表示包含系列标志的源区域内行数或列数的整数。 HasLegend:若指定True,则图表将具有图例。 Title:图表标题文字。 CategoryTitle:分类轴标题文字。 ValueTitle:数值轴标题文字。 ExtraTitle:三维图表的系列轴标题,或二维图表的第二数值轴标题。 可组合使用Add方法和ChartWizard方法,以创建包含工作表中数据的图表工作表。下例基于工作表“Sheetl”中单元格区域“A1:A20”中的数据生成新的折线图并打印。 With Charts.Add ChartWizard source:=Worksheets (&sheet1&).Range_ (&a1:a20&),gallery:=xlLine, title:=“折线图表” Printout End With 5)使用Excel工作表函数 在VB语句中可使用大部分的Excel工作表函数,可通过WorksheetFunction对象调用Excel工作表函数。下面的Sub过程用Min工作表函数求出指定区域中单元格的最小值,并通过消息框显示结果值。 Sub UserFunction() Dim myRange As Range Set myRange=Worksheets (&Sheet1&).Range(&B2:F10&) answer=Application.WorksheetFunction.Min(myRange) MsgBox answer End Sub 如果使用以区域引用为参数的工作表函数,必须指定一个Range对象。如可用Match工作表函数对A1:A10区域的所有单元格进行搜索。 Sub FindFirst() myVar=Application.WorksheetFunction.Match_ (9,orksheets( 1).Range(&A1:A10&),0) MsgBox myVar End Sub 要在单元格中插人工作表函数,可将该函数指定为对应于Range对象的Formula属性值。在以下示例中,将当前工作簿Sheetl内A1:B3区域的Formula属性指定为RAND工作表函数(此函数产生二个随机数)。 Sub InsertFormula() Worksheets (&Sheet1& ).Range(&A1:B3&).Formula=&RAND()& End Sub 以上简要介绍了Excel对象模型中部分对象及其属性和方法,更详细的信息可参阅Excel 2000帮助中的“Microsoft Excel Visual Basic参考”一节的内容。实际上,Microsoft Office家族的Word,PowerPoint, Access和Project等应用程序都可以在VB应用程序中调用,其原理和步骤完全相同,只是其对象模型有所不同而已。 4、示例: 首先建立一个窗体(FORM1),在窗体中加入一个DATA控件和一按钮,引用Microsoft office/9.shtml' target='_blank' class='article'&Excel类型库:从&工程&菜单中选择&引用&栏;选择Microsoft Excel 9.0 Object L选择&确定&。 在FORM的LOAD事件中加入: Data1.DatabaseName = 数据库名称 Data1.RecordSource = 表名 Data1.Refresh 在按钮的CLICK事件中加入 Dim Irow, Icol As Integer Dim Irowcount, Icolcount As Integer Dim Fieldlen() &存字段长度值 Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Set xlApp = CreateObject(&Excel.Application&) Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets(1) With Data1.Recordset.MoveLast If .RecordCount & 1 Then MsgBox (&Error 没有记录!&) Exit Sub End If Irowcount = .RecordCount &记录总数 Icolcount = .Fields.Count &字段总数 ReDim Fieldlen(Icolcount).MoveFirst For Irow = 1 To Irowcount + 1 For Icol = 1 To Icolcount Select Case Irow Case 1 &在Excel中的第一行加标题 xlSheet.Cells(Irow, Icol).Value = .Fields(Icol - 1).Name Case 2 &将数组FIELDLEN()存为第一条记录的字段长 If IsNull(.Fields(Icol - 1)) = True Then Fieldlen(Icol) = LenB(.Fields(Icol - 1).Name) Else Fieldlen(Icol) = LenB(.Fields(Icol - 1)) End If xlSheet.Columns(Icol).ColumnWidth = Fieldlen(Icol) xlSheet.Cells(Irow, Icol).Value = .Fields(Icol - 1) Case Else Fieldlen1 = LenB(.Fields(Icol - 1)) If Fieldlen(Icol) & Fieldlen1 Then xlSheet.Columns(Icol).ColumnWidth = Fieldlen1 Fieldlen(Icol) = Fieldlen1 Else xlSheet.Columns(Icol).ColumnWidth = Fieldlen(Icol) End If xlSheet.Cells(Irow, Icol).Value = .Fields(Icol - 1) End Select Next If Irow && 1 Then If Not .EOF Then .MoveNext End If Next With xlSheet .Range(.Cells(1, 1), .Cells(1, Icol - 1)).Font.Name = &黑体& .Range(.Cells(1, 1), .Cells(1, Icol - 1)).Font.Bold = True .Range(.Cells(1, 1), .Cells(Irow, Icol - 1)).Borders.LineStyle = xlContinuous End With xlApp.Visible = True xlBook.Save Set xlApp = Nothing End With
请登录后再发表评论!怎样判断指定工作表“Sheet1”为激活状态_乐收推广怎样判断指定工作表“Sheet1”为激活状态 发布于: 16:48:50If ActiveSheet.Name = Sheet1 Then
百度排名
1.Excel 如何判断一个名称为“sheet1”的工作表是否存在?-ExcelVBA...
简介: 9条回复 - 发帖时间: 日
...
2.Excel [求助]如何在VBA中判断指定工作表是否处于筛选状态 - 『...
简介: 5条回复 - 发帖时间: 日
...
3.第7章 工作表的相关操作 - 综合课件 - 道客巴巴
简介: PDF文档(共33页) - 下载需30积分
...
4.第7章 工作表的相关操作_百度文库
评分:55 33页
...
5.怎样激活sheet表?_百度知道
简介: 2个回答 - 提问时间: 日
...
6.Worksheet对象 应用示例 1_芒果汁_新浪博客
简介: 图文Worksheet对象代表Excel工作表,Worksheets集合对象代表Excel工作表的集合。下面,...
7.判断指定的工作簿是否已打开 | 完美Excel
简介: 下面整理归纳了一些实用函数代码,其功能都是用来判断指定的工作簿是否打开,如果已...
8.Excel 如何判断一个sheet是否存在 - 『Excel VBA程序开发』 - ...
简介: 6条回复 - 发帖时间: 日
...
9.Excel 问题集锦 – 【人人分享-人人网】
简介: 如何给自动筛选中的自定义指定快捷键...
10.Excel 请问如何判断是否存在指定的工作表名?-ExcelVBA程序开发-...
简介: 5条回复 - 发帖时间: 日
...
11.用VB怎样判断Excel中某个sheet是否存在 -- 经验心得 -- 小小之家...
简介: 用VB怎样判断Excel中某个sheet是否存在DimmysheetAsWorksheetOnErrorResumeNextSetmysheet=Sheets(sheet1)IfErr.Number=0ThenMsgBox工作表存在。ElseMsgBox工作表不存在!,...
12.各种Excel VBA的命令-sohua2000-ChinaUnix博客
简介: Worksheets(Sheet1).Range(A1:G37).Cut ...
13.EXCEL问题集合(VB部分) - 豆丁网
简介: 如何以工作簿中的一个SHEET 是否激活为判断条件 27 教各位关于按钮位置的问题 27 一个用VBA 写入公式的问题 27 怎么能在excel 没打开文件的时候被禁用 28 在...
14.Excel 如何判断两个工作表指定行重复复制 - 『Excel VBA程序开发...
简介: 3条回复 - 发帖时间: 日
...
15.EXCEL 常用的宏代码大全
简介: 指定工作表 '计算指定工作表Sheet1 Worksheets(...
16.各种Excel VBA的命令 - nxhujiee的专栏 - 博客频道 -
简介: &本示例显示活动工作簿中工作表 sheet1 上...
17.C# 中把DataTable中数据导出Excel编程实例__西西软件资讯
简介: 添加新工作簿 eole.Workbooks.add 激活指定的工作簿 eole.WorkSheets(工作簿名).Activate 设置第3个工作表为激活工作表 eole.Worksheets(sheet1).Activate...
18.各种VBA excel 命令、属性、方法编程 - 好工具站长分享平台
简介: 下述过程激活工作簿中的第1张工作表。Worksheets(...
19.EXCEL中有若干个工作表,sheet0中给出文件名,自动保存顺..._百度知道
简介: 2个回答 - 提问时间: 日
...
20.Excel 如何用代码判断代码中是否存在Worksheet_Change(ByVal ...
简介: 9条回复 - 发帖时间: 日
...
21.各种Excel VBA的命令(下) - Excel教程 - 新客网
简介: lculate End Sub Sub 重算指定表() ...
22.如何通过宏实现指定的工作表(sheet1)上特定单元格(A1;B..._百度知道
简介: 1个回答 - 提问时间: 日
...
23.office2010(excel丶word丶ppt等)使用技巧大全 - MBA智库文档
简介: 从外表上无法看出其已禁用,如何设置属性使其像控件...
24.Excel 如何指定当前工作簿sheet1工作表没有内容的列 - 『Excel ...
简介: 9条回复 - 发帖时间: 日
...
25.如何新建EXCEL表? - CSDN论坛 -
简介: 5条回复 - 发帖时间: 日
...
26.[ZZ]各种Excel VBA的命令[1]_算法的天空_百度空间
简介: 下述过程激活工作簿中的第四张工作表。Sheets(4)...
27.EXCEL中如何求两个时期之间相差的天数?_爱问知识人
简介: 3个回答 - 最新回答: 日
...
28.[求助]如何一打开工作簿,关闭所有工作表,剩 sheet1 为活动工作表?
简介: 9条回复 - 发帖时间: 日
...
29.VFP_全面控制EXCEL - 摩根船长 - 博客园
简介: *!* 3.设置第3个工作表为激活工作表oExcel...
30.本示例为设置密码窗口(1)putbox(请输入密码:)=1
简介: 指定工作表 '计算指定工作表Sheet1 Worksheets(...
31.搜集各种excelvba的命令供参考!
简介: ) 指定工作表 '计算指定工作表Sheet1 Worksheets ...
32.excel使用技巧 - 研修资源 - 卢洲映月——冬冬电教工作室 - 江西...
简介: 假定同一工作薄有sheet1至sheet100共100个相同格式...
33.vba]-Excel VBA命令(转)
简介: 指定工作表 '计算指定工作表Sheet1 Worksheets (...
34.Excel常见宏命令_百度文库
评分:4.55 81页
...
35.Excel基本操作技巧荟萃_1
简介: 变,字体不变,从外表上无法看出其已禁用,如何设置...
36.excel写数据及判断两个工作表单元格的值是否相等_蓝颖_新浪博客
简介: 函数说明:判断两个工作表对应单元格内容是否相等 ' 参数说明: ' (1)sheet1:工作表 1 的名称; ' (2)sheet2:工作表 2 的名称; ' (3)startColumn:开始...
37.【精品】带你入门VBA,第四讲(如何控制关于工作薄与工作表) - 其它...
简介: Word文档(共25页) - 下载需850积分
...
38.如何在Excel工具栏中添加计算器?
简介: 当我们新建一个Excel工作表时,系统默认设置当前的...
39.完全手册Excel VBA典型实例全集:通过368个例子掌握 完整页 - ...
简介: Worksheet对象表示Excel工作簿中的工作表,Worksheet...
40.Excel Application对象应用大全 | 完美Excel
简介: 返回顶级对象的方法,例如ActiveCell、ActiveSheet,等等。 本文使用VBA代码示例...
41.excel表格的基本操作完全精华版_许若_新浪博客
简介: 2.双击当前工作表下部的名称,如“Sheet1”,再输入...
42.我的自学资料第一集(Excel VBA)
简介: 6条回复 - 发帖时间: 日
...
43.Excel精英培训网 - Microsoft Excel
简介: 8. [『Excel 函数与图表』] [已解决]如何在...
44....那么在Sheet1表中所要指定的表框中就能自动转换成Sh..._百度知道
简介: 3个回答 - 提问时间: 日
...
45.vfp 操作excel - zhantianyou的专栏 - 博客频道 -
简介: *!* 3.设置第3个工作表为激活工作表oExcel...
46.VBA | 完美Excel - Part 16
简介: 图文上述代码在示例工作表中运行后,将返回“1”,即单元格A1所在区域的标题行的行数为1。(2)返回指定(或活动)单元格所在区域的行数Worksheets(sheet1).Range(H3...
【上一条 如何列出含某字符的工作表名称 】【下一条 区域的选取,求大侠帮忙 】链接地址:相关阅读芙蓉果能治便秘吗?我想说能【招商微信:CL 】吃的东西我都比较慎重,我都是先自己吃过,有效,才做的。我老公就是便秘,还胖。现在好了,而且还瘦了,也没有反弹。好东西就代理了,现在我身边的...&思埠总代V号:axin1879 实力经销商,正品保证,支持专柜权威验货,假一赔十。思埠总代的货全部公司发货,直接发你手里,防止参假货,低价还是正品,只有找我!我团队带你发展。期待我们一起努...芙蓉果酵素青梅是一款非常不错的减肥排毒产品哦,可以治疗顽固便秘清理肠道垃圾哦~芙蓉果酵素青梅详细咨询微信:tcc3199下面来介绍一下芙蓉果的成分:1、青梅--青梅在日韩被称为&长寿果、寿...杜高犬结构各个部位的比例与角度比特幼犬的饲养中,水是绝对不可少的东西,应经常放一盆清水于固定的场所,以便它在吃食及运动前后任意饮用。如果犬从小能饮足够的清洁水,就可使其发育正常,胃肠健康。尤其在夏秋季...
瑞安到天津的直达汽车
温州到天津汽车
温州到天津长途汽车 途经:沧州【长途问路】【发布长途信息】
始发站: 温州 随车电话/[...{标题24小时服务电话天昊物流有限公司,为您提供长途运输服务。全年365天,全天24
小时为您提供超一流门对门货物运输、包装、仓储、物流等超值服务。 运输范围(危险品禁止运输...南红玛瑙,颜色红艳如火,质地细腻油润如玉,自古就被称为&赤玉&。明代《徐霞客游记》中曾描述,当时徐霞客来到云南一个叫做玛瑙山的地方,他看到悬崖峭壁之中嵌有一种玛瑙,其&ldqu...北京到安徽蚌埠货运公司/物流专线
北京君合通达物流有限公司!24小时电话:何经理专业承接北京到蚌埠货运业务运输方式:公路汽运、陆路运输。 运输车型:高护栏、平板车、敞车、特种车...excel vba编程开发 网页抓取设计联系信息联系人:李先生电话:QQ:学习微软&Excel&2002&VBA&编程和XML,ASP技术&-&CH9
第九章 利用VBA控制其它应用程序
作者:Julitta Korol 翻译:Tiger Chen Apr 5&
你每天在办公室里或者家里在你的电脑上工作时,都要用到很多种应用程序。要从你的硬盘或者软盘上查找某个文件的话,你就要打开视窗浏览器。当你要设置系统时间或者更改屏幕外观的话,可以点击控制面板上的相应的图标。如果你的电脑上安装了微软办公软件套餐的话,就可以使用Word创建各种各样的文件,并且依靠Excel进行所有的计算。微软Access对于保存重要的数据表非常有用,而PowerPoint则有助于你使用声音和图片。最后,微软Outlook使你易于保存你的联系、时间和约会并且分享给他人。使用这些应用软件的时候,你经常要在他们之间切换,你可以使用键盘直接输入数据或者复制或移动数据。这些操作&&打开应用程序以及在它们之间传输数据时不需要手动操作的。它们可以通过一些很有趣的VBA函数和指令来自动完成。在本章,你将学习多种从VBA过程里打开应用程序的方法,并且找到如何使用称为自动化的技术直接从微软Excel直接控制其它应用程序。
启动应用程序
启动一个应用程序的方法不止一个,实际上,你至少可以使用五种方法手动打开某个程序:通过&开始&|&程序&菜单,快捷键,&运行&命令,MS-DOS窗口,或者在视窗浏览器里双击可执行文件。
本节假设你对手动启动应用程序很熟悉,并且很想从Excel内部的VB编辑窗口试验其它启动应用程序的方法。
我们从最简单的开始吧&&Shell函数。该函数使你可以从VBA过程里直接打开任意程序。假设你的过程必须打开视窗记事本,要打开记事本,你所有要做的就是在关键字Sub和End
Sub之间加上一条语句,或者更好的方法是在立即窗口里输入下述语句,并且按下回车键:
Shell &notepad.exe&,
vbMaximizedFocus
你将立即看到结果。
在上面的语句里,&notepad.exe&是你要打开的程序的名称。如果你担心程序找不到的话,那么该名称就应该包含完整的路径(启动器名称和文件夹名称)。注意,程序名称用双引号括起来了。Shell函数的第二个参数可以忽略。该参数明确窗口形式(也就是当程序启动的时候,它如何显示在屏幕上的)。在上面的例子里,记事本将显示为最大化的窗口。如果没有明确窗口形式,那么程序就会被最小化(参见表9-1)。
窗口形式常数
窗口显示情况
窗口被隐藏
vbNormalFocus
普通大小,并带焦点
vbMinimizedFocus(默认设置)
最小化,并带焦点(这是缺省设置)
vbMaximizedFocus
最大化,并带焦点
vbNormalNoFocus
普通大小,并失去焦点
vbMinimizedNoFocus
最小化,并失去焦点
如果Shell函数能够启动某个可执行文件,那么它就会返回一个叫做任务ID的号码。该号码是指示应用程序启动的唯一号码。如果Shell函数不成功的话(也就是说某应用程序不能打开),VB就会产生一错误。如果你要使用Shell函数启动的应用程序的话,就不要在Shell函数后面输入任何语句。Shell函数启动程序是不同时的,意思是说VB启动Shell函数指定的应用程序,并且,VB在启动程序后,立即就回到过程里面去继续剩余的指令(因此,你没有机会立即使用该应用程序)。你如果使用Shell函数来启动控制面板呢?
1. 打开一新工作簿,保存为Chap09.xls
2. 在VB编辑器窗口,插入新模块
3. 重新命名工程为WorkWApplets,模块名为ShellFunction
4. 输入下面显示的过程StartPanel:
Sub StartPanel()
Shell &Control.exe&,
vbNormalFocus
控制面板里面有很多图标,每个图标执行一个或者多个任务。众所周知,在每个图标后面都有一个程序的,当用户双击图标或者用箭头选择该图标然后按下Enter键,该程序都会被激活。作为一个规律,你总是可以通过查看某个图标的属相来检查什么文件名驱动某个图标。不幸的是,控制面板里面的图标的属性选择都被禁止了。然后,你可以通过创建一个到该图标的快捷键来查找控制面板里图标文件。例如,在你创建一个更改电脑原始设置的过程之前,我们来找出激活该图标的文件名称。
1. 从&开始&菜单里选择&设置&,然后选择&控制面板&(在Windows XP开始菜单里可以直接看到&控制面板&)
2. 在控制面板窗口里,右键单击&初始选项&图标,并且从快捷菜单中选择创建快捷键
3. 点击确定,将快捷键放在桌面上
4. 关闭控制面板窗口
5. 返回桌面,在初始选项的快捷键上单击右键,然后选择属性
6. 在属性窗口,点击快捷键页,然后点击更改图标按钮
图9-1 每个控制面板里的图标都有一个后缀名为.cpl的文件
7. 写下.cpl文件名称(Control Panel
Library)或者动态链接库文件(.dll)并关闭该练习中开启的所有窗口
表9-2 激活控制面板图标的一些文件示例
控制面板图标
.cpl或者.dll文件
电话和调制解调器选项
TELEPHON.CPL或MODEM.CPL
添加/删除程序
APPWIZ.CPL
网络和拨号连接
NETCPL.CPL或NETSHELL.DLL
32-Bit ODBC
ODBCCP32.CPL
MLCFG32.CPL
用户和密码
PASSWORD.CPL或NETPLWIZ.DLL
TIMEDATE.CPL
Internet选项
INETCPL.CPL
声音和多媒体属性
下面的国产ChangeSettings示范如何使用Shell函数来启动控制面板的初始设置图标。注意Shell函数的参数必须写在括号里,如果你后面需要在你的程序里使用它返回值的话。
1. 在当前模块里输入过程ChangeSettings,如下所示:
Sub ChangeSettings()
Dim nrTask
nrTask = Shell(&Control.exe
intl.cpl&, vbMinimizedFocus)
Debug.Print nrTask
运行几次过程ChangeSettings,每次从表9-2里列出的清单里提供一个不同的.cpl文件。你可能需要将程序改为:
Sub ChangeSettings2()
Dim nrTask
Dim iconFile As String
iconFile = InputBox(&Enter the name of the CPL
or DLL file:&)
nrTask = Shell(&Control.exe &
& iconFile, vbMinimizedFocus)
Debug.Print nrTask
如果你要启动的程序是微软应用程序,那么除了使用Shell函数外,你还可以很方便地使用VB的方法ActivateMicrosoftApp来实现。该方法在微软Excel应用程序的对象里是可用的,例如,要从立即窗口启动PowerPoint的话,你所有要做的事情就是输入下面的指令并且按下Enter:
注意ActivateMicrosoftApp方法要求一个常量来指定要启动的程序。如果PowerPoint没有打开的话,上面的过程就会打开PowerPoint,但是如果该程序已经打开的话,该指令不会再打开一个新的PowerPoint界面,只是简单的激活已经在运行的应用程序。你可以结合ActivateMicrosoftApp方法使用下列常量,常量的名称指名应用程序名称。
应用程序名称
xlMicrosoftAccess
xlMicrosoftFoxPro
xlMicrosoftMail
PowerPoint
xlMicrosoftPowerPoint
xlMicrosoftProject
xlMicrosoftSchedulePlus
xlMicrosoftWord
在应用程序之间切换
因为用户可以同时在Windows环境下使用多个应用程序,所以你的VBA过程必须要知道如何在打开的程序之间切换。假设除了Excel之外,你还打开了另外两种应用程序:Word和Explorer。你可以按照下面的语法使用AppActivate语句来激活已经打开的程序:
AppActivate title [, wait]
只有标题参数是必须的,这是应用程序的名称,正如它显示在应用程序窗口的标题栏那样,或者它也可以是Shell函数返回的任务ID号码。注意,参数title要跟每个正运行的应用程序的标题字符串进行对比,如果没有精确的匹配,那么任何标题字符串里前面的字符和参数title一致的应用程序就会被激活。(译者:例如,你要激活Excel,那么title参数应该是&Microsoft
Excel&,如果你写的是&Microsoft&,那么激活的就也可能是Word,PowerPoint&&)。第二个参数wait是可选的,它是个布尔值(True或False),明确VB什么时候激活应用程序。如果在这里是False的话,该应用程序就立即会被激活,甚至被调应用程序并没有焦点。如果在wait参数处放置True的话,那么被调的应用程序就会等到它有了焦点,然后才会激活该应用程序。例如,要激活Word,你就得输入下列语句:
AppActivate &Microsoft Word&
注意,应用程序名称用双引号引用起来。你也可以使用Shell函数返回的数值作为语句AppActivate的参数:
& run Microsoft Word 运行Word应用程序
ReturnValue = Shell(&C:\Microsoft
Office\Office\Word.exe&,1)
& activate Microsoft Word 激活Word
AppActivate ReturnValue
语句AppActivate用来在应用程序之间切换,所以要求这些程序已经在运行。该语句仅仅改变焦点,指定的应用程序变为当前活动的窗口。AppActivate语句不会启动任何应用程序,参见下一章节的过程FindCPLFiles,这也是使用该语句的一个例子。我们来练习一下最近介绍的几个VBA语句:
1. 通过在立即窗口里输入下列VBA语句来打开资源管理器:
Shell &Explorer&
按下回车键后,被请求的应用程序就被打开了,带有&我的文档&文件夹的图标就会出现在任务栏上。
2. 在立即窗口里输入下列代码:
AppActivate &My Documents&
按下回车键后,焦点就会移至我的文档窗口。
控制其它应用程序
既然你已经知道了如何使用VBA语句来启动一个程序,以及在应用程序之间切换,那么我们来看看一个应用程序是如何与另外一个应用程序交流的。对于一个应用程序来说,要控制另一个应用程序的最简单的方式就是使用SendKeys语句。该语句允许你将许多的按键发送到活动应用程序窗口,你可以发送一个或组合键并且得到直接使用键盘的同样效果。SendKeys语句如下所示:
SendKeys string [, wait]
这个必须的参数string是你要发送到活动应用程序窗口的键或组合键,例如,使用下列指令来发送字母&f&键:
SendKeys &f&
要发送组合键Alt+f,使用:
SendKeys &%f&
百分符号(%)是表示Alt键的字符串。要发送例如Shift+Tab的组合键的话,那么就要使用下面的语句:
SendKeys &+{TAB}&
加号(+)表示Shift键。要发送其它键或者其它组合键的话,请参见表9-3列出的相应字符串。
技巧9-1 SendKeys和其它应用程序
你只能发送按键到那些为微软视窗操作系统设置的应用程序。
技巧9-2 SendKeys和被保护的字符
有些字符在和SendKeys语句一起使用时具有特殊的意义,它们是:加号(+),脱字符号(^),符合(~)和括号()。要发送这些字符到另一个应用程序的话,就必须将它们用打括号{}括起来。要发送打括号时,则需要输入{{}和{}}
SendKeys语句的第二个参数是可选的,wait是个逻辑值True或者False。如果是False(缺省),那么VB在发送按键后立即返回过程,如果为True,那么VB只有在发送的按键执行后才能返回到过程。
如果要发送一个表格9-3里面没有列出的字符的话,那么记住这些代码必须用引号括起来,例如:
SendKeys &{BACKSPACE}&
表9-3 SendKeys语句里使用的按键代码
{BACKSPACE}
{SCROLLLOCK}
大写锁定键
{CAPSLOCK}
数字锁定键
向下翻页键
向上翻页键
屏幕打印键
技巧9-3 SendKeys语句对格敏感
当你使用SendKeys语句发送按键时,你一定要牢记区分字符的大小格。因此,要发送组合键Ctrl+d的话,你必须使用^d,而发送Ctrl+Shift+D的话,则必须使用字符串:^+d
在本章前期,你学习了.cpl文件启动多种控制面板的图标。你现在要创建的VBA过程目的是要定位你硬盘上所有扩展名为.cpl的文件。
1. 使用立即窗口来启动资源管理器:
Shell &Explorer.&
&我的文档&图标将出现在屏幕下方的任务栏上。
2. 在当前工程里插入新模块并且重命名为SendKeysStatement
3. 输入过程FindCPLFiles,如下所示:
Sub FindCPLFiles()
' The keystrokes are for Windows 2000
AppActivate &My Documents&
' activate the Search window 激活搜索窗口
SendKeys &{F3}&, True
' move the pointer to the Search for files将光标移到搜索文件
' and folders named text box 和文件夹(名称在文本框里)
SendKeys &%m&, True
' type in the search string 输入要搜索的字符串
SendKeys &*.cpl&, True
' move to the Look in drop down box 焦点移到下拉框
SendKeys &{Tab}{Tab}&,
' change to the root directory 更改根目录
SendKeys &C:\&, True
' execute the Search 执行搜索
SendKeys &%s&, True
切换到Excel应用程序窗口并且运行过程FindCPLFiles(使用Alt+F8打开宏对话框,选择过程名称,再点击运行)。
上面过程的第一条语句使用AppActivate语句(参见前面章节)来激活已经打开的应用程序,还记得你在立即窗口里使用Shell语句激活了资源管理器吗?剩余的语句发送一些必要的按键到活动应用程序。本过程的结果是扩展名为.cpl的控制面板文件的搜索结果列表。你也可以使用一个SendKeys语句来发送所有必须的按键(参见下面的例子),然而,一步一步发送按键更容易理解程序。
Sub FindCPLFiles2()
AppActivate &My Documents&
SendKeys &{F3}%
m*.cpl{Tab}{Tab}C:\%s&, True
控制应用程序的其它方法
尽管你可以使用SendKeys语句来传递命令给其它应用程序,但是你还是必须要求助于其它方法来获得对该应用程序的充分控制。有两种标准方法可以供应用程序和另外一种应用程序交流。最新的方法,被称为自动控制,它允许你访问和操纵另一种应用程序的对象。你可以通过自动控制编写VBA过程,通过引用其它应用程序的对象、属性和方法来控制其它应用程序。在本章接下来的章节里,你将学习如何通过自动控制来控制其它应用程序。称为DDE(动态数据交换)的老数据交换技术是允许你在两个应用程序之间动态发送数据的协议,它通过创建一个特殊的通道来发送和结束信息。DDE非常慢,使用困难,只有当你需要与一个不支持自动控制的老应用程序交流时,才需要使用DDE。
了解自动控制
当和另外一个应用程序交流时,你可能需要更多的功能,而不只是激活它来发送按键。例如,你可能需要在该应用程序里创建和操纵对象,你可以在Excel电子表格力插入整个Word文档。因为Excel和Word都支持自动控制,所以,你可以在Excel里编写一个VBA过程在操作Word对象,比如文档或者段落。支持自动控制的应用程序称为自动控制服务器(Automation
servers)或者自动控制对象(Automation objects)。
能够操作服务器对象的应用程序称为自动控制控件。有些应用程序只能是服务器或者控件,而其它的则既可以是服务器也可以是控件。Microsoft
都可以作为自动控制服务器和控件。自动控制控件可以是安装在你电脑上的各种ActiveX控件,你将在下一章里学习这些对象。
了解链接和嵌入
VBA过程控制其它应用程序之前,我们来看一看如何手动链接和插入对象。人们熟知的OLE,对象链接和嵌入,允许你创建组合文档。组合文档包含其它应用程序创建的对象。例如,如果你要在Excel里嵌入一个Word文档的话,Excel只要知道创建该对象需要用到的应用程序名称,以及该对象在屏幕上显示的方法。组合文档有链接或者对象嵌入产生。当你使用手动方法来嵌入对象时,你首先要在一个应用程序里复制它,再粘贴到另一个应用程序里。链接对象和嵌入对象的主要区别是对象储存和更新的方式。我们来试验一下:
1. 激活Word并打开任意一个文档
2. 选择和复制任意一段文本
3. 在Excel工作表里,使用下述四种方法之一将复制的文本进行粘贴:
& 粘贴为文本(选择编辑|粘贴)。复制的文本就会出现在活动单元格(见图9-2,单元格A2)
& 粘贴为嵌入对象(选择编辑|选择性粘贴,点击&粘贴选项&按钮,并且在清单里选择&Microsoft Word Document
对象&。)粘贴的文本将作为一个嵌入的对象(见图9-2,单元格A5)。该嵌入的对象成为了目的文件的一部分。因为该嵌入的对象没有和原始数据链接,所以该信息是静态的。当文件源中的数据改变时,该嵌入的对象不会被更新。如果要更改嵌入的数据,你就必须双击它,这样就会打开该对象在源程序里编辑它。当然,该源程序必须已经安装在你的电脑上了。当你嵌入对象时,所有的数据都会存储在目的文件里,这会导致文件大小显著增大。注意,当你嵌入一个对象后,Excel的编辑栏里将显示:
=EMBED(&Word.Document.8&,&&)
& 粘贴为链接对象(选择编辑|选择性粘贴,点击&粘贴链接&选项,然后在列表里选择&Microsoft Word Document
对象&)。虽然目的文件显示了所有的数据,但是它仅仅储存了该数据的地址。当你双击该链接的对象时(见图9-2,单元格A9),原应用程序就会被启动。链接对象是一种动态的操作,这意味着当源文件里的数据改变时,链接的数据就会自动更新。因为目的文件只包含对象如何与源文件链接的信息,所以,对象链接并不会增加目的文件的大小。下面的公式是Excel用来链接对象的:
=Word.Document.8|'C:\Documents and Settings\tj8147\My
Documents\Tiger\VB\Excel2002_Programming\Chinese\Excel2002VBA_Ch9.doc'!'!OLE_LINK2'(译者:由于文件存储位置不同,本节的翻译可能和你的情况不一样,请注意分辨)
粘贴为超链接(选择粘贴|超链接译者:应该为&编辑&|&粘贴为超链接&)粘贴的数据在工作表里显示为带下划线、有颜色的文本(见图9-2,单元格A11)。点击该超链接,你可以快速地激活该源文件。
图9-2 示范链接和嵌入
使用VBA进行链接和嵌入
过程InsertLetter示范了如何使用程序在Excel嵌入一个Word文档。用你自己的文件名称代替引用&C:\Hello.doc&。过程InsertLetter使用AddOLEObject方法,该方法创建一个OLE对象,并且返回一个对表该新OLE对象的Shape对象。在VB在线帮助里面,你可以找到AddOLEObject方法可用的其它参数。
1. 在当前工程里面插入一新模块,并重命名为OLE
2. 输入过程InsertLetter,如下所示:
Sub InsertLetter()
Workbooks.Add
ActiveSheet.Shapes.AddOLEObject
FileName:=&C:\Hello.doc&
上面的过程打开一个新工作簿,然后嵌入该指定的Word文档。要链接一个文档的话,你就必须明确另外一个参数Link,如下所示:
ActiveSheet.Shapes.AddOLEObject _
FileName:=&C:\Hello.doc&,
Link:=True
技巧9-4 对象链接和嵌入
当你不得不做出决定是否使用嵌入还是链接对象时,只要有下列之一的条件,那么就使用嵌入:
& 你不在乎文档大小,或者你有足够的硬盘空间和内存来处理大文件
& 你再也不会在其它复合文档里使用源文件或者源文本
& 你想要将该文档通过电子邮件或者磁盘发送给别人,并且确保他们能够顺利地读取数据。
(译者:本人也倾向于使用嵌入,因为链接经常会问你是否要更新链接,而且,很多人经常会忘记发送源文件给别人。)
COM和自动控制
在自动控制后面的驱动力量是组件对象模型(COM),它决定了服务器应用程序创建对象的规则,也明确服务器和控制应用程序在使用这些对象时必须遵循的方法。COM标准包含作为自动控制界面(Automation
interfaces)可用的函数集合。
当服务器应用程序创建一个对象是,它会自动地制作一个和它一起可用的界面。该界面包括该对象可识别的属性、方法和事件。控制应用程序不需要为了控制该对象去了解它的内部结构,只需要知道如何操作服务器应用程序制作的对象界面。
对于控制应用程序与自动控制对象(服务器)来说,你必须将你的VBA过程中可用的对象和服务器实际的自动控制对象联系起来,这个过程就叫做绑定。这里有两种类型的绑定:后期绑定和早期绑定。你对绑定的选择对你的应用程序表现影响很大。
当你声明一个变量 As Object 或者As
Vaiant时,VB使用的是后期绑定。后期绑定也叫运行绑定。简单地说,后期绑定意味着VB在设计时不会将你的对象变量和自动控制对象联系起来,而是要等到你实际运行该过程时才联系起来。因为As
Object或者As
Variant的声明在本质上是非常普通的,所以,VB在汇编时不能决定你变量指向的对象真正具有你的VBA过程使用的属性和方法。
下面的声明导致对指定对象的后期绑定:
Dim mydoc As Object
后期绑定的优势是所有的自动控制对象都知道如何使用。
后期绑定的劣势是对内置常量不支持。因为在设计时,VB并不知道你的对象指向的类型库,所以,你必须通过在应用程序文档里查询数值在你的代码里定义常量。同样,在运行时询问应用程序将放慢你程序的执行。
注意:后期绑定使得在另外一个应用程序的类型库里访问对象称为可能,而不需要首先建立对该对象库的引用。如果你不肯定你的用户是否在他们的机子上安装了要指向的类型库,那么就使用后期绑定。
下面的过程示范如何使用后期绑定来打印Word文档。
Sub PrintWordDoc()
Dim objWord As Object
Set objWord =
CreateObject(&Word.Application&)
With objWord
.Visible = True
.Documents.Open
&C:\Hello.doc&
.Options.PrintBackground = False
.ActiveDocument.PrintOut
objWord.Documents.Close
objWord.Quit
Set objWord = Nothing
技巧9-5 这是什么类型的绑定?
无论何时你使用常用的Object或Variant数据类型声明对象变量,请考虑后期绑定。后期绑定和早期绑定的主要区别是你如何声明你对象变量。
当你声明对象变量为明确的对象类型时,VB使用的是早期绑定。早期绑定也熟知为汇编绑定。这意味着VB在源代码转变为可执行代码时期,就将你的对象变量和自动控制对象联系起来了。常见的语法如下所示:
Dim objectVariable As Application.ObjectType
在上面的语法中,Application是应用程序的名称,正如它出现在对象浏览器里的工程库下拉清单里的样子(例如Word和Excel)。ObjectType是对象类型(例如应用程序,文档,工作簿,工作表)。
下面的声明导致早期绑定:
Dim mydoc As Word.Document
Dim mydoc As Excel.Worksheet
早期绑定让你能够充分利用VB编辑器上可用的许多调试工具。例如你可以使用对象浏览器查找外部对象,属性和方法。VB的自动语法检测,自动列出成员以及自动显示快速信息(这些都在第二章里有讨论)可以让你在编写代码时更快,更少出错。另外,早期绑定允许你使用内置常量作为方法和属性设定的参数。因为这些常量在设计的时候在类型库里面就是可用的,所以你不需要定义它们。这些非常方便的内置语法检测,智能特点和对内置常量的支持,在后期绑定里是不可用的。虽然使用早期绑定的VBA过程执行得更快一些,但是一些非常老的视窗应用程序只能使用后期绑定。
注意:为了使用早期绑定,你必须首先建立对对象库的引用(参见接下来的章节)。当你确定你的用户安装了引用的类型库时,就使用早期绑定。
建立到对象库的引用
如果你决定通过自动控制使用早期绑定连接到另外的应用程序的话,你首先就应该建立对包括你要操作对象的对象库的引用。依照下面的步骤创建对Microsoft
Word 对象库的引用:
1. 激活VB编辑器窗口
2. 在工程浏览器里选择当前工程,并且选择&工具&|&引用&
3. 在引用对话框里,选择&可使用的引用&列表框里面的应用程序名称。例如,点击Microsoft Word 9.0 Object
Library或者 Microsoft Word 10.0 Object
Library旁边的复选框(见图9-3)(译者:这里引用的是Microsoft Word 11.0 Object
Library)。拉下可用引用列表框的滚动条定位该对象库,如果你已经安装了某个应用程序但是它的类型库在可用引用列表框里面没有出现的话,那么你可以点击&浏览&按钮。
4. 点击确定按钮关闭引用对话框。
引用对话框列出了VBA工程可用的引用名称。没有使用的引用按字母顺序列出,勾选上了的引用按优先顺序列出。例如,在Excel里,Microsoft
Excel 10.0 Object Library比Microsoft Word 10.0或者9.0 Object
Library具有更高的优先顺序。当一个过程引用一个对象时,VB从引用对话框里列出的库里按顺序搜索所有被引用的对象库。
图9-3 为了要操作其它应用程序的对象,你应该建立对该需要的对象库的引用
在建立了对所要求对象库的引用后,你就可以在对象浏览器里浏览该对象的属性和方法。
图9-4 建立了对Microsoft Word 11.0 Object Library的引用后(见图9-3),Microsoft
Word的所有对象,属性和方法都可以从Excel VBA工程里访问了。
创建自动控制对象
依照下列步骤,在你的VBA过程里创建一个自动控制对象:
& 使用Dim&As Object或者Dim&As
Application.ObjectType子句声明对象变量(参见前面章节里的后期和早期绑定使用主题)
& 如果你在使用早期绑定,那么使用引用对话框来建立对应用程序对象类型库的引用
如果自动控制对象不存在,那么使用CreateObject函数;如果自动控制对象已经存在的话,那么就使用GetObject函数来建立对该对象的引用
& 使用关键字Set将CreateObject或者GetObject函数返回的对象赋值到对象变量
使用CreateObject函数
按照下面的语法,使用CreateObject函数从VBA过程里创建对自动控制对象的引用:
CreateObject(class)
参数class是你想要引用的应用程序的名称。该名称包含早先讨论的对象类类型(参见早期绑定部分)。必须使用关键字Set将自动控制对象赋予对象变量,如下所示:
Set variable_name = CreateObject(class)
例如,使用自动控制对象来激活Word,你的VBA过程里需要包括下面的声明语句:
'early binding 早期绑定
Dim wordAppl As Word.Document
Set wordAppl =
CreateObject(&Word.Application&)
'late binding 后期绑定
Dim wordAppl As Object
Set wordAppl =
CreateObject(&Word.Application&)
通常,CreateObject函数创建该特定自动控制对象的新示例。然而,一些应用程序注册为一种叫做&单一示例&的应用程序了,这就是说你不能同时运行一个以上的示例。Microsoft
Word和PowerPoint就是这种单一示例的应用程序,因此,如果Word或者PowerPoint已经在运行,那么CreateObject函数就会直接引用到在运行的示例去,而不会再创建一个新的示例。
使用自动控制创建一个新的Word文档
我们来看看你如何将在前面章节学习到的关于绑定的知识应用到现实生活中的例子里。你也许有时需要从Excel直接通过程序打开一个Word文档,并且往里面写入数据,下面的例子使用了早期绑定。
1. 在当前工程里插入新模块,并重命名为Automation
2. 在工程浏览器里,选择当前工程,并且选择&工具&|&引用&
3. 如果可用引用列表里的Microsoft Word 9.0 Object Library或者Microsoft Word
10.0 Object Library没有被勾选,那么找到它们并勾选上,点击确定退出。
4. 输入下面过程WriteLetter:
Sub WriteLetter()
Dim wordAppl As Word.Application
Application.StatusBar = &Creating Word
Application Object...&
Set wordAppl =
CreateObject(&Word.Application&)
With wordAppl
.Visible = True
Application.StatusBar = &Creating a new
document...&
.Documents.Add
.ActiveDocument.Paragraphs(1).Range.InsertBefore
&Invitation&
Application.StatusBar = &Saving
document...&
.ActiveDocument.SaveAs
&C:\Invite.doc&
Application.StatusBar = &Exiting
Set wordAppl = Nothing
Application.StatusBar = False
5. 切换到Excel应用程序窗口,并选择&工具&|&宏&|&宏&,找到过程WriteLetter并点击运行
过程WriteLetter开始时声明对象变量为特定的对象类型(Word.Application)。回想这种生命(早期报道)要求你建立对Word对象库的引用(本章的前面讲过)。CreateObject函数返回的自动控制对象赋值到一个叫做wordAppl的对象变量,因为由子弟控制启动的应用程序不会出现在屏幕上,所以使用语句:
wordAppl.Visible = True
使启动的Word应用程序可见,这样你就可以观察VBA的工作情况。该过程里后面的语句打开一个新文档(Add方法),并且在第一段输入文本(InsertBefore方法),将文档保存到硬盘(SaveAs方法),以及关闭Word应用程序(Quit方法)。每条语句之前都有一条指令,将信息显示在Excel应用程序窗口下面的状态栏上。当Word应用程序关闭后,指令:
Set wordAppl = Nothing
清除对象变量,收回该对象占用的内存。语句:
Application.StatusBar = False
将状态栏上的信息恢复为默认的&就绪&。
前面提到过,Word是单一示例(single-instance)应用程序,这意味着你不能同时运行一个以上的Word示例,简单说,如果你没有启动Word,WriteLetter过程里面的CreateObject函数将会启动Word,否则,它将会使用当前活动的Word示例。
使用GetObject函数
如果你确定自动控制对象以及存在并且已经打开,那么就考虑使用GetObject函数,如下所示:
GetObject([pathname][, class])
GetObject函数有两个参数,它们都是可选的。使用第一个参数来明确你要打开的文件名称,应该提供完整的文件路径。如果你忽略该参数,那么不必须明确参数class,指明要使用的对象类型,例如:
Excel.Application
Excel.Sheet
Excel.Chart
Excel.Range
Word.Application
Word.Document
PowerPoint.Application
在Invite.xls的基础上创建一个Excel对象,并且强制设置为Excel 5工作表,你可以使用下列声明:
& late binding 后期绑定
Dim excelObj As Object
Set excelObj =
GetObject(&C:\Invite.xls&,
Excel.Sheet.5&)
要设定对象变量为某个特定的Word文档的话,你可以使用:
&early binding 早期绑定
Dim wordObj As Word.Application
Set wordObj =
GetObject(&C:\Invite.doc&)
如果要访问一个正在运行的Office应用程序对象,那么可以将第一个参数空出:
Dim excelObj As Object
Set excelObj = GetObject(,
&Excel.Application&)
当你调用不带第一个参数的GetObject函数时,它就会返回一个对该应用程序示例的引用,如果该应用程序没有启动的话,就会产生错误。
打开存在的Word文档
下面的过程CenterText示范了GetObject函数的使用,访问Invite.doc文件。回想一下,该文件是在本章前面的过程WriteLetter里创建的。过程CenterText会将指定Word文档里的第一段居中。该过程使用了一个叫做DocExists的自定义函数来检查指定的文件是否存在。另外一个自定义函数(IsRunning)检查Word是否已经在运行。基于上述检查结果,使用CreateObject或者GetObject函数。如果出现错误,那么错误编号和错误描述将会显示出来。
Sub CenterText()
Dim wordDoc As Word.Document
Dim wordAppl As Word.Application
Dim mydoc As String
Dim myAppl As String
On Error GoTo ErrorHandler
mydoc = &C:\Invite.doc&
&Word.Application&
'first find out whether the specified document exists
首先查明该文档是否存在
If Not DocExists(mydoc) Then
MsgBox mydoc & & does not
exist.& & Chr(13)
& Chr(13) _
& &Run the WriteLetter
procedure to create & & mydoc
'now check if Word is running 现在检查Word是否正在运行
If Not IsRunning(myAppl) Then
MsgBox &Word is not running - will create a new
instance of _
Set wordAppl =
CreateObject(&Word.Application&)
Set wordDoc = wordAppl.Documents.Open(mydoc)
MsgBox &Word is running - will get the
specified document. &
'bind the wordDoc variable to a specific Word document
将变量wordDoc绑定到特定的Word文档
Set wordDoc = GetObject(mydoc)
'center the 1st paragraph horizontally on page 将第一段水平居中
With wordDoc.Paragraphs(1).Range
.ParagraphFormat.Alignment = wdAlignParagraphCenter
wordDoc.Application.Quit
SaveChanges:=True
Set wordDoc = Nothing
Set wordAppl = Nothing
MsgBox &The document &
& mydoc & & was
reformatted.&
ErrorHandler:
MsgBox Err.Description, vbCritical, &Error:
& & Err.Number
Function DocExists(ByVal mydoc As String) As Boolean
On Error Resume Next
If Dir(mydoc) & &
DocExists = True
DocExists = False
End Function
Function IsRunning(ByVal myAppl As String) As Boolean
Dim applRef As Object
On Error Resume Next
Set applRef = GetObject(, myAppl)
If Err.Number = 429 Then
IsRunning = False
IsRunning = True
'clear object variable 清除对象变量内容
Set applRef = Nothing
End Function
使用关键字New
除了使用CreateObject函数来引用到其它的应用程序之外,你可以使用关键字New。关键字New告诉VB创建一个对象的新示例,返回到该示例的引用,以及将引用赋予该对象变量。例如,你可以按下面的方式使用关键字New:
Dim objWord As Word.Application
Set objWord = New Word.Application
Dim objAccess As Access.Application
Set objAccess = New Access.Application
使用关键字New声明的对象变量总是早期绑定的。使用关键字New比使用CreateObject函数更高效。你每次使用关键字New的时候,VB就会创建应用程序的一个新示例。如果该应用程序以及运行,你就不需要打开另外一个示例,你应该使用GetObject函数。关键字New也可以用来在声明对象变量的时候,同时创建一个新的对象示例,例如:
Dim objWord As New Word.Application
注意,当你使用关键字New在Dim语句里声明对象变量的时候,你就不需要使用Set语句了。然而,不建议使用这种创建对象变量的方法,因为当该对象变量真正被创建后,你就失去对它的控制了。在声明中使用关键字New会导致创建对象,即使它没有被使用到。因此,如果你想要控制创建的对象变量,那么总是使用下述语法声明你的对象变量吧:
Dim objWord As Word.Application
Set objWord = New Word.Application
Set语句可以进一步在你需要使用该对象的地方使用,接下来的章节将示范如何使用关键字New来创建Microsoft
Outlook的新示例,并且编写你的联系地址到Excel工作表中。
使用自动控制访问Microsoft Outlook
要从Excel直接访问Outlook的对象模型的话,首先就要建立对Microsoft Outlook 10.0或者9.0
Object Library的引用。下面的程序例子将在Excel工作表里插入你Outlook里面的联系信息。
Sub GetContacts()
Dim objOut As Outlook.Application
Dim objNspc As NameSpace
Dim objItem As ContactItem
Dim Headings As Variant
Dim i As Integer ' array element 数组成员
Dim r As Integer ' row index 行号
Set objOut = New Outlook.Application
Set objNspc =
objOut.GetNamespace(&MAPI&)
Headings = Array(&Full Name&,
&State&, &Zip
Sheets(1).Activate
For Each cell In
Range(&A1:F1&)
cell.FormulaR1C1 = Headings(i)
For Each objItem In objNspc.GetDefaultFolder _
(olFolderContacts).Items
With ActiveSheet .Cells(r, 1).Value = objItem.FullName
.Cells(r, 2).Value = objItem.BusinessAddress
.Cells(r, 3).Value = objItem.BusinessAddressCity
.Cells(r, 4).Value = objItem.BusinessAddressState
.Cells(r, 5).Value = objItem.BusinessAddressPostalCode
.Cells(r, 6).Value = objItem.Email1Address
Next objItem
Set objItem = Nothing
Set objNspc = Nothing
Set objOut = Nothing
过程GetContacts开始声明一个叫做objOut的对象变量来存储到Outlook应用程序的引用,该变量定义为明确的对象类型(Outlook.Application),因此VBA使用早期绑定。
注意在该过程里,我们使用关键字New(在前面部分由讨论)来创建一个新的Outlook应用程序对象示例,返回引用到该示例,并且将该引用赋予声明的变量objOut。
为了访问Outlook里的联系项目,你也需要声明对象变量来引用Outlook的NameSpace和ContactItem。NameSpace对象代表了储存为MAPI(信息应用程序编程界面)的信息。NameSpace对象包含了文件夹(联系地址,日志,任务,等等),每个文件夹由一次有它们的项目。一个项目是Outlook的一个详细数据,例如邮件信息,或者联系地址。
使用For&Each&Next循环在工作表里写入列标题之后,过程使用另外一个For&Each&Next循环来遍历联系地址文件夹中的项目。GetDefaultFolde方法返回一个联系地址文件夹的对象变量,该方法有一个参数,该常量代表了你要访问的文件夹。当所有的联系地址都被写入Excel工作表后,该过程释放所有对象变量,将它们设定为Nothing。
注意,当你运行过程GetContacts时,你可能会看到一个警告信息,告诉你程序试图访问电子邮件地址,点击确定允许操作。
在本章,你学习了如何从VBA程序里启动、激活和控制其它应用程序(Word和Outlook)。你学习了如何使用SendKeys方法发送按键到另一个应用程序。你也学习了如何手动和编程地添加链接和嵌入对象。最后,你使用自动控制从Excel里创建新的Word文档,以及后来访问该文档并设置一些格式。你也学习了如何从Outlook里获取联系地址并放置到Excel工作表中。你使用两个新函数CreateObject和GetObject扩展了你的VBA知识。你也学习了如何以及何时使用关键字New。请在第十五章里学习如何从Excel里控制Microsoft
在下一章,你将学习如何通过自定义窗体从用户处收集更多的数据。
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 excel怎么添加工作表 的文章

 

随机推荐