如何运用vba绘制游标卡尺,本文主要内容关键词为:vba论文,此文献不代表本站观点,内容供学术参考,文章仅供参考阅读下载。
游标卡尺作为基本测量工具之一,自然是考查的热点。物理教师在编制试卷时,最困难的就是绘制游标卡尺。很多教师就采用其他软件绘制然后以图片的形式复制到Word里,再经过缩放等操作后往往会出现模糊、变形、锯齿等现象。实际上用Word里嵌套的vba编程工具就可很准确的画出游标卡尺。下面就把笔者在实际工作中积累的一点经验介绍给大家,以供参考。
一、Word的对象及坐标系
运用vba画游标卡尺主要用到一个集合对象:Shapes。其方法又与Word坐标系有关系。
1.Shapes集合对象
Shapes集合对象是隶属于Document对象。Shapes集合对象代表文档中或者文档页眉和页脚中的所有图形。本文运用Shapes集合对象的两个方法添加形状。AddLine方法添加直线,AddTextbox方法添加文本框。
2.Word的坐标系
Word坐标系的坐标原点在Document对象的左上角,横向向右为x轴正方向,纵向向下为y轴正方向。量度值为磅,允许两位小数,可以满足一般用户的精度要求。
二、AddLine方法和AddTextbox方法
运用vba绘制游标卡尺主要就是用Shapes集合对象的这两种方法。
1.AddLine方法
在文档中添加一条直线。返回一个代表该直线的Shape对象,并将其添加到Shapes集合。
语法:expression。AddLine(BeginX,BeginY,EndX,EndY)
各参数解释:
expression 必需。该表达式返回一个Shapes对象。
BeginX Single 类型,必需。直线起点相对于锁定标记的水平位置,以磅为单位。
BeginY Single 类型,必需。直线起点相对于锁定标记的垂直位置,以磅为单位。
EndX Single 类型,必需。直线终点相对于锁定标记的水平位置,以磅为单位。
EndY Single 类型,必需。直线终点相对于锁定标记的垂直位置,以磅为单位。
2.AddTextbox方法
在文档中添加一个文本框。返回一个代表该文本框Shape对象,并将其添加到Shapes集合。
语法:expression。AddTextbox(Orientation,Left,Top,Width,Height)
各参数解释:
expression 必需。该表达式返回“应用于”列表中的一个对象。
Orientation Mso TextOrientation 必需。指定文本的方向。
Left Single 类型,必需。文本框左侧边缘的位置,以磅为单位。
Top Single 类型,必需。文本框上部边缘的位置,以磅为单位。
Width Single 类型,必需。文本框的宽度,以磅为单位。
Height Single 类型,必需。文本框的高度,以磅为单位。
提示:在编写vba代码时,要充分利用好vba的帮助。
三、算法及主程序
以10格游标卡尺为例进行算法说明,20格、50格游标卡尺算法类似。
ybcgs=10 ′游标尺格数。
l=TextBoxl.Text ′通过文本框获取需要绘制游标卡尺的读数值,以mm单位。
zcl=Int(l) ′需要绘制游标卡尺的读数值的整数部分,主尺上的第一条刻度是zcl-3。
zczxfd=10 ′主尺最小分度的屏幕长度,以磅为单位。相当于游标卡尺主尺的最小分度1mm。
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的属性设置直线的格式(代码略)。
Fori=1 To zkds ′画主尺刻度线。
If(zcl-4+i)/10=bzckd Then
docActive.Shapes.AddLine(80+zczxfd*i,172,80+zczxfd*i,180).Select ′画整数厘米刻度线。
docAcfive.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 1<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+ybzxtd*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
四、结束语
利用vba编程能拓展office办公软件的功能和提升工作效率,提高教学质量。此代码也可移植到PPT中制作交互性很强的课件,也可仿照着绘制其他基本测量工具的读数练习,如螺旋测微器、电表读数等。