Microsoft Excel 对象模型

理解Excel的对象模型是对其编程的基础,Excel以层次结构组织对象。

一个Excel应用程序就是一个Application,全局的对象比如菜单,工具条都属于Application对象。
一个Application可以包含很多个Workbook(Workbooks),具体而言就是,可以同时打开很多个工作薄(Workbooks),但是某一时刻只有一个工作薄(Workbook)处于可编辑状态,这个工作薄就叫活动工作薄(ActiveWorkbook)。
一个Workbook可以包含很多个Worksheet(Worksheets),具体而言就是,一个工作薄(Workbooks)可以包含很多工作表(Worksheets),但是某一时刻只有一个工作表(Worksheet)处于可编辑状态,这个工作表就叫活动工作表(ActiveWorksheet)。
一个Workbook可以包含很多个Shapes对象,工作表中还可以包含一些图表、标记、注释、控件等,这些都是浮在Sheet页上的,统称为Shapes,其中使用最多的是图表(Charts)。
一个Worksheet可以包含很多个Range对象,具体而言,一个工作表里面有很多个单元格,单元格范围用Range表示,Range可以是一个单元格也可以是多个单元格,单元格都是嵌入到Sheets中的。

更多信息参见 Office VBA Reference

二十四史简介——周书

《周书》,五十三卷,其中本纪八卷,列传四十二卷。唐令孤德主编,参加编写的有岑文本和崔仁师。
北魏末年,政治动荡,乱事遍起。出身于北魏北方六镇中武川镇的宇文泰,率领一批以武川镇人为主的鲜卑族军队,联合关陇地区的汉人豪族武装,建立起西魏政权。后宇文泰的第三子宇文觉在公元557年代魏建周,史称北周。西魏、北周这两个前后相续的政权,统治区域大致包括今天陕西、宁夏、甘肃和四川的大部,山西西南部、湖北西部及河南西部。与东边的东魏、北齐和江南的梁、陈成鼎足之势。
公元577年,北周灭北齐,统一中国北方。
公元581年,杨坚代周,建立隋朝。
《周书》虽以“周”题名,但实际上记述了从公元534年东、西魏分裂到杨坚代周为止四十八年的西魏、北周的历史。
《周书》由于根据的资料贫乏,再加上它所记载的人物多是本朝显官的祖先,因而显得单薄而不尽合事实。但它基本上反映了宇文政权的建立,建立后三个封建政权之间的战争,以及宇文政权上层集团内部斗争的情况,是今天研究和了解西魏、北周历史最基本、最原始的一部史书。

AutoCAD 对象模型

理解AutoCad的对象模型是对其编程的基础,AutoCad以层次结构组织对象。

在顶层是Application对象(即AutoCad 本身),其他对象均为Application对象的子对象。在Application对象下面是Preferences(优先设置)和Document(文档)对象,通过Preferences对象可以对AutoCad Tools>Preferences菜单项中的几乎每一个选项进行访问和修改,以获取或改变AutoCad的优先设置。

Document对象是控制AutoCad图形文件的直接对象,它代表某一个装入的CAD图形文件(一般设为当前激活的文件)。Document对象下面有Model Space(模型空间)和Paper Space(图纸空间)对象及Blocks(块)、Layers (层)、Plot(出图)、Selectionsets(选择集)、 views(视图)、 utility(功能)等一系列对象(集合),其含义与AutoCad中相似。

Model Space是当前图形文件中图形实体,如直线、圆、多义线等的集合,每个实体即是一个对象,可通过属性和方法改变实体或生成新实体。

对非图形实体,如层(layer)、线形(line type)等的访问则通过访问Document对象下面的相应的集合类型的子对象,如Layers 、LineTypes等来实现。

集合类型的对象可以使用VB中所有的集合操作方法。

Plot对象提供了访问Plot对话框中各选项的桥梁,使应用程序具有用不同方式控制AutoCad出图的能力。

Utility对象使用户在AutoCad命令行与CAD交互成为可能,通过它可以处理整型、浮点型、字符型等用户输入,还可以接受点(Point)或角(Angle)等AutoCad的特殊量。

更多信息参见 Autodesk product documentation

二十四史简介——北齐书

《北齐书》,五十卷,其中本纪八卷,列传四十二卷,唐李百药撰。
北魏末年,北方六镇发生声势浩大的反叛浪潮,后出身于怀朔镇低级武官的高欢获得了对二十余万鲜卑人的领导权,控制了北魏朝政。公元534年,高欢所立的孝武帝元修被逼西奔长安,高欢于是另立孝静帝元善见,迁都邺城,史称东魏。公元550年,高欢之子高洋废孝静帝自立,建立北齐。东魏、北齐统治区域南至长江,与梁、陈两朝先后对峙,西边在今山西、河南、湖北,与西魏、北周分界。公元577年,北齐被北周吞并。
《北齐书》本名《齐书》,宋时才加一“北”字而成今名。它虽以记载北齐历史为主,但实际上记述了从高欢起兵到北齐灭亡前后约八十年的历史,集中反映了东魏、北齐王朝的盛衰兴亡。
李百药(公元565–648年),字重规,定州安平(今河北安平)人,出身仕宦之家。李百药从小好学,博览经史著作,隋初曾任太子舍人,袭父爵为安平公。贞观二十二年卒,享年八十四岁。
北齐政权中,皇族内部叔侄、兄弟相互残杀,使这个二十年的短命王朝换了六个皇帝。《北齐书》对封建统治者之间的权势争夺有较多的叙述。
《北齐书》在流传过程中残缺严重,现在只有十七卷保持原貌,其他都是后人用《北史》等著作增补,这使《北齐书》的价值大大降低。但即便如此,它还是为我们了解东魏、北齐历史提供了一部断代史著作。

后期绑定与前期绑定

后期绑定

  将对象分配给一个声明为objcet类型的变量,若将一个变量声明为variant or object , 包括as form,as control变量,vb编译时就无法确定该变量讲引用那种类型的对象,应用程序只能在运行时确定对象的属性和方法。

  使用后期绑定,每次调用属性或者方法时,vb都将成员名传给该对象IDispatch接口的方法-GetIDsOfNames方法,GetIDsOfNames返回 该成员的id或者DispId,vb程序再将DispID传给IDispathch接口的Invoke方法来调用该成员。

  对于进程外部件而言,这就意味着一次额外跨进程调用,调用开销增大。

(idispatch接口:IDispatch接口把所有成员函数的入口地址放入到一个数组中,并且内部组织了一个Map,将数组索引和方法名称一一影射,DispId(COM 事件或者函数的调度 ID)就是这些方法在数组中的索引。通过DispId可以找到该方法的地址,调用该方法。

如,Dim oAutoCAD As Object
Set oAutoCAD = GetObject(, “Autocad.Application”)

前期绑定

  VB在编译时就知道属性或者方法的所在对象。

  前期帮定预先知道函数成员在类型中的DispID,不需要调用GetIDsOfNames方法。而且早期绑定允许程序在编译时分配内存,或者进行其他优化,从而生成更高效的应用程序。

如,Dim oAutoCAD As AcadApplication
Set oAutoCAD = GetObject(, “Autocad.Application”)

 使用比较

  可见,前期绑定的效率高于后期绑定的效率,在进程内创建对象,据说速度比例是2:3。而且前期绑定,在集成开发环境下,方法成员会自动显示。前期绑定会减少运行时的错误,但前期绑定时,在vb下需要引用dll文件或tlb文件,如果被引用的组件不存在,整个引用程序也不能运行,如果是后期绑定,只要在创建对象createobect时才会出错。前期帮定时,如果被引用组件版本不同,可能会有兼容性问题,但是如果是后期绑定,则没有问题。