恩施市国土资源局 湖北恩施 445031
摘要:利用编写的VB程序对测量数据进行处理,可以使测量数据处理简单化,随着一些编程软件在移动设备中的应用,使测量变的很便捷,所以学习一些关于编程方面的知识,可以在以后的工作中更得心应手。
关键词:VB语言;测量数据;数据处理
VB(Visual Basic的简称,可视化的编程语言)是微软公司的一种通用程序设计语言,包含在Microsoft Excel、Microsoft Acces、AutoCAD等众多Windows应用软件中的VBA都是使用VB语言,以供用户二次开发,本文主要讲述Microsoft Excel VBA在测量数据处理方面的应用;首先通过一个简单的实例来了解一下VB的应用和代码编写规则。
下面以创建一个 Hello VB的程序为例进行介绍。程序执行流程为:运行程序,单击“确定”按钮,在窗体的标签中显示Hello VB;单击“退出”按钮,退出程序。
打开Visual Basic 6.0,选择“文件”/“新建工程”命令,弹出“新建工程”对话框。选择“标准 EXE”,单击“确定”按钮,如图1-1所示,即可创建一个标准的EXE工程。
图1-1
在创建工程后,系统会自动建立一个新窗体,并将其命名为Forml。在该窗体上添加一个Label控件、两个CommandButton控件,如图1-2所示。
双击“确定”和“退出”按钮进入代码编辑区,分别编写如下代码:
Private Sub Command1_Click()
Label1.Caption = "Hello VB"
End Sub
Private Sub Command2_Click()
End
End Sub
Private Sub Form_Load()
Me.Caption = "第一个VB应用程序"
Label1.Font = "宋体"
Label1.FontSize = 32
Label1.FontBold = True
Command1.Caption = "确定"
Command2.Caption = "退出" '
End Sub
完成程序编写后,需要对程序进行调试和运行;当程序没有错误时,就可以成功运行了。单击“确定”按钮,在标签中即可显示出Hello VB的字样,运行效果如下图所示,单击“退出”按钮可以退出程序。
单击“编辑”按钮,打开代码编写器,编写如以下代码:
Sub hdm()
Dim e(0 To 999),i,f(1 To 999),g,a,b,c,d,m
a = Sheets("sheet1").Cells(2,1).Value
b = Sheets("sheet1").Cells(2,2).Value
c = Sheets("sheet1").Cells(2,3).Value
i = 0
g = 1
e(0)= Int(Sheets("sheet2").Cells(1,3).Value + 0.5)
f(1)= 1
For i = 1 To 999
e(i)= Int(Sheets("sheet2").Cells(i,3).Value + 0.5)
If Abs(e(i)- e(i - 1))>= 1 Or(e(i)= 0 And e(i - 1)<> 0)Then
f(g + 1)= i
g = g + 1
End If
Next i
m = g - 1
For g = 1 To m
Rows(f(g)+(g - 1)* 2).Resize(2).Insert
d = Int(Sheets("sheet2").Cells(f(g)+(g - 1)* 2 + 2,3).Value + 0.5)
Sheets("sheet2").Cells(f(g)+(g - 1)* 2,1)= "begin"
Sheets("sheet2").Cells(f(g)+(g - 1)* 2,2)= d
Sheets("sheet2").Cells(f(g)+(g - 1)* 2 + 1,1)= 0
Sheets("sheet2").Cells(f(g)+(g - 1)* 2 + 1,2)=(d - a)* c + b
Next g
Sheets("sheet2").Columns(3)= ""
Sheets("sheet2").Columns(2).NumberFormatLocal = "0.000_ "
End Sub
程序说明:
所测断面桩号和应测桩号之差大于50cm将出现错误,在sheet1表格中输入起坡点高程、起坡桩号和坡比,如图2-3所示:
图3-2
在代码编写区中输入以下代码:
Private Sub CommandButton1_Click()
a = Cells(3,1).Value
b = Cells(3,2).Value
c = Cells(3,3).Value
d = Cells(3,4).Value
e = Cells(3,5).Value
f = Cells(3,6).Value
h = Cells(3,7).Value
For i = 5 To 999
If Cells(i,1).Value <> "" Then
g = b +(Cells(i,1).Value - a)* c
If Cells(i,3).Value > g + h Then
Cells(i,4).Value = Sqr((Cells(i,3).Value -(g + e - f))^ 2 +(Cells(i,2).Value)^ 2)- f
Else
Cells(i,4).Value = Abs(Cells(i,2))- d
End If
Else
Cells(i,4).Value = ""
End If
Next i
End Sub
Private Sub CommandButton2_Click()
For i = 5 To 999
Cells(i,4).Value = ""
Next i
End Sub
程序说明:
按要求输入起始桩号、高程、坡比和洞型数据,然后直接把数据粘贴到相应表格中点击“计算”按钮,就可以得到超欠挖结果。
在导流洞和边坡开挖过程中经常会遇到一些在圆弧段上的数据,需要计算桩号、偏距,通过坡比和高程来计算超欠挖情况;用计算器只能逐一进行计算,对大量的数据进行处理很不方便,所以用Microsoft Excel VBA编写一个可以在圆弧段上批量转换坐标的应用程序,其方法如上;添加和布置如图4-1所以的按钮和数据:
图4-1
在代码编写区中输入以下代码:
Private Sub CommandButton1_Click()
Const Pi As Single = 3.1415926536
If OptionButton1.Value = True Then
GoTo lb1
Else
GoTo lb2
End If
lb1:
a = Cells(3,1).Value:b = Cells(3,2).Value:c = Cells(3,3).Value:d = Cells(3,4).Value:e = Cells(3,5).Value:k = Cells(3,7).Value
h = Int(e)+ Int((e - Int(e))* 100)/ 60 +(e * 100 - Int(e * 100))/ 36
For i = 5 To 999
If Cells(i,1).Value <> "" And Cells(i,2).Value <> "" Then
x = Cells(i,1).Value - b:y = Cells(i,2).Value - c
If y <> 0 Then
f =(Pi *(1 - Sgn(y)/ 2)- Atn(x / y))* 180 / Pi
Else
f = 180
End If
If k *(f - h)< 0 Then
g = k *(f - h)+ 360
Else
g = k *(f - h)
End If
Cells(i,6).Value = a + 3.1415926536 * g * Cells(3,8).Value / 180
If Cells(i,6).Value > d Then
MsgBox "第" & i & "行超出计算范围",vbOKOnly,"提示"
Cells(i,1).Interior.Color = vbRed:Cells(i,2).Interior.Color = vbRed:Cells(i,7).Value = ""
Else
Cells(i,7).Value = k *(Cells(3,8).Value - Sqr(x ^ 2 + y ^ 2))
End If
Else
Cells(i,6).Value = "":Cells(i,7).Value = ""
End If
Next i
End
lb2:
a = Cells(3,1).Value:b = Cells(3,2).Value:c = Cells(3,3).Value:d = Cells(3,4).Value:e = Cells(3,5).Value:k = Cells(3,7).Value
h = Int(e)+ Int((e - Int(e))* 100)/ 60 +(e * 100 - Int(e * 100))/ 36
For j = 5 To 999
If Cells(j,6).Value <> "" And Cells(j,7).Value <> "" Then
If h + k *((Cells(j,6).Value - a)* 180 /(Cells(3,8).Value * 3.1415926536))< 0 Then
s = h + k *((Cells(j,6).Value - a)* 180 /(Cells(3,8).Value * 3.1415926536))+ 360
Else
s = h + k *((Cells(j,6).Value - a)* 180 /(Cells(3,8).Value * 3.1415926536))
End If
z = Cells(3,8).Value - k * Cells(j,7).Value
Cells(j,1).Value = b + z * Cos(s * Pi / 180):Cells(j,2).Value = c + z * Sin(s * Pi / 180)
Else
If Cells(j,6)> d Then
Cells(j,1).Value = "":Cells(j,2).Value = "":Cells(j,6).Interior.Color = vbRed:Cells(j,7).Interior.Color = vbRed
MsgBox "第" & j & "行超出计算范围",vbOKOnly,"提示"
End If
End If
Next j
End
End Sub
Private Sub CommandButton2_Click()
For i = 1 To 999
For j = 1 To 8
If Cells(i,j).Interior.ColorIndex = 3 Then
Cells(i,j).Interior.ColorIndex = 0
End If
Next j
Next i
End Sub
程序说明:
按提示在单元格输入相应的数据(注意转角向左转为-1,转角向右转为1),本程序可以在圆弧段上正桩号、偏距,也可以反算X、Y;当计算桩号超出YZ点的桩号程序将终止,并提示“超出计算范围”,该坐标处单元格底色自动变红。
利用编写的VB程序对测量数据进行处理,可以使测量数据处理简单化,随着一些编程软件在手机等一些移动设备中的应用,使测量变的很便捷,所以学习一些关于编程方面的知识,可以在以后的工作中更得心应手。
参考文献
[1]《Visual Basic 从入门到精通》第3版
论文作者:尹亚
论文发表刊物:《建筑学研究前沿》2017年第23期
论文发表时间:2018/1/11
标签:程序论文; 测量论文; 按钮论文; 代码论文; 数据论文; 数据处理论文; 单击论文; 《建筑学研究前沿》2017年第23期论文;