如何运用vba绘制游标卡尺
2011-05-18张小建
张小建
(江苏省木并茶高级中学,江苏 如东 226406)
游标卡尺作为基本测量工具之一,自然是考查的热点.物理教师在编制试卷时,最困难的就是绘制游标卡尺.很多教师就采用其他软件绘制然后以图片的形式复制到word里,再经过缩放等操作后往往会出现模糊、变形、锯齿等现象.实际上用word里嵌套的vba编程工具就可很准确的画出游标卡尺.下面就把笔者在实际工作中积累的一点经验介绍给大家,以供参考.
1 Word的对象及坐标系
运用vba画游标卡尺主要用到一个集合对象:Shapes.其方法又与Word坐标系有关系.
1.1 Shapes集合对象
Shapes集合对象是隶属于 Document对象.Shapes集合对象代表文档中或者文档页眉和页脚中的所有图形.本文运用Shapes集合对象的两个方法添加形状.Addline方法添加直线,AddTextbox方法添加文本框.
1.2 word的坐标系
Word坐标系的坐标原点在Document对象的左上角,横向向右为x轴正方向,纵向向下为y轴正方向.量度值为磅,允许两位小数,可以满足一般用户的精度要求.
2 Addline方法和AddTextbox方法
运用vba绘制游标卡尺主要就是用Shapes集合对象的这两种方法.
2.1 Addline方法
在文档中添加一条直线.返回一个代表该直线的Shape对象,并将其添加到Shapes集合.
语法:expression.AddLine(BeginX,BeginY,EndX,EndY)
各参数解释:
expression 必需.该表达式返回一个Shapes对象.
BeginX Single 类型,必需.直线起点相对于锁定标记的水平位置,以磅为单位.
BeginY Single 类型,必需.直线起点相对于锁定标记的垂直位置,以磅为单位.
EndX Single 类型,必需.直线终点相对于锁定标记的水平位置,以磅为单位.
EndY Single 类型,必需.直线终点相对于锁定标记的垂直位置,以磅为单位.
2.2 AddTextbox方法
在文档中添加一个文本框.返回一个代表该文本框Shape对象,并将其添加到Shapes集合.
语法:expression.AddTextbox(Orientation,Left,Top,Width,Height)
各参数解释:
expression 必需.该表达式返回“应用于”列表中的一个对象.
Orientation MsoTextOrientation 必需.指定文本的方向.
Left Single 类型,必需.文本框左侧边缘的位置,以磅为单位.
Top Single 类型,必需.文本框上部边缘的位置,以磅为单位.
Width Single 类型,必需.文本框的宽度,以磅为单位.
Height Single 类型,必需.文本框的高度,以磅为单位.
提示:在编写vba代码时,要充分利用好vba的帮助.
3 算法及主程序
以10格游标卡尺为例进行算法说明,20格、50格游标卡尺算法类似.
ybcgs=10′游标尺格数.
l=TextBox1.Text′ 通过文本框获取需要绘制游标卡尺的读数值,以mm单位.
zcl=Int(l)′ 需要绘制游标卡尺的读数值的整数部分,主尺上的第一条刻度是zcl-3.
zczxfd=10′ 主尺最小分度的屏幕长度,以磅为单位.相当于游标卡尺主尺的最小分度1 mm.
zkds=7+ybcgs′ 主尺总刻度数.
zccd=80+ybcgs*zczxfd′ 主尺总长度(磅).
If zcl<6 Then′ 通过以下算法返回主尺整厘米刻度值的第1个刻度值.
bzckd=Round((zcl/10),0)
Else
bzckd=Round((zcl/10)+0.1,0)
End If
ybzxfd=zczxfd*(1-(1/ybcgs))′ 游标卡尺最小分度的屏幕长度(磅).
Set docActive=ActiveDocument
docActive.Shapes.AddLine(80,180,80+zccd,180).Select′ 画主尺横线.
再利用line的属性设置直线的格式(代码略).
For i=1 To zkds′ 画主尺刻度线.
If(zcl-4+i)/10=bzckd Then
docActive.Shapes.AddLine(80+zczxfd*i,172,80+zczxfd*i,180).Select′画整数厘米刻度线.
docActive.Shapes.AddTextbox
(msoTextOrientationHorizontal,80+zczxfd*i-2,162,8,10).Select′在整数厘米刻度线位置添加一个文本框.再利用TextFrame属性设置文本框的格式(代码略).
Selection.TypeText Text:=bzckd′ 写整数厘米刻度值.
bzckd=bzckd+1
ElseIf l<6 And i=1 Then′ 读数值小于6mm,主尺的第一个刻度线为零值.
docActive.Shapes.AddLine(80+zczxfd*i,172,80+zczxfd*i,180).Select′ 画整数厘米刻度线
docActive.Shapes.AddTextbox
(msoTextOrientationHorizontal,80+zczxfd*i-2,162,8,10).Select′在整数厘米刻度线位置添加一个文本框.再利用TextFrame属性设置文本框的格式(代码略).Selection.TypeText Text:=bzckd′ 写整数厘米刻度值
bzckd=bzckd+1′ 刻度值加 1,返回下一个整厘米刻度值.
zcl=3′因为一般主尺的第一条刻度线是zcl-3,而读数值小于6mm的第一条刻度线是零,故要给zcl重新赋值,根据算法推算为zcl=3.
Else
docActive.Shapes.AddLine(80+zczxfd*i,175,80+zczxfd*i,180).Select′ 画主尺刻度线.
End If Next
′画游标尺刻度线
n=0
If l<6 Then′ 通过以下算法返回游标尺零刻度线的位置.
ybl=zczxfd*(l+1)
Else
ybl=zczxfd*(l-Int(l)+4)
End If
For II=0 To ybcgs ′画游标尺的刻度线.
If II=5*n Then ′每 5格标一个格数值
n=n+1
docActive.Shapes.AddLine(80+ybl+ybzxfd*II,180,80+ybl+ybzxfd*II,187).Select
docActive.Shapes.AddTextbox (msoTextOrientationHorizontal,80+ybl+ybzxfd*II-2,188,15,10).Select
再利用TextFrame属性设置文本框的格式(代码略).
Selection.TypeText Text:=II
Else
docActive.Shapes.AddLine
(80+ybl+ybzxfd*II,180,80+ybl+ybzxfd*II,185).Select
End If
Next
With docActive.Shapes′ 画游标尺的边框.
AddLine(75+ybl,180,75+ybl,200).Select
AddLine(88+ybl+ybzxfd*ybcgs,180,88+ybl+ybzxfd*ybcgs,200).Select
AddLine(75+ybl,200,88+ybl+ybzxfd*ybcgs,200).Select
End With
绘制游标卡尺的效果如图1所示:
图1
4 结束语
利用vba编程能拓展office办公软件的功能和提升工作效率,提高教学质量.此代码也可移植到PPT中制作交互性很强的课件,也可仿照着绘制其他基本测量工具的读数练习,如螺旋测微器、电表读数等.