教你如何通过Excel-VBA编写测量坐标计算程序文件
- 格式:doc
- 大小:581.00 KB
- 文档页数:16
页脚 .
教你如何通过Excel VBA编写测量坐标计算程序
发布日期:2013-01-11 来源:网络 作者:未知 浏览次数:1704
摘 要:认识VBA、理解VBA,并利用Office Excel VBA编写测量坐标计算程序。
关键词:Excel VBA 程序 坐标 编写
了解:VBA是什么?简单的说就是一种自动化语言,它可以使常用的程序自动化,可以
创建自定义的解决方案。可以用Excel的宏语言来使Excel自动化运行等……Microsoft让
它开发出来的应用程序共享一种通用的自动化语言——Visual Basic For Application(V
BA),可以认为VBA是非常流行的应用程序开发语言Visual Basic的子集,事实上VBA
是VB应用程序的版本,尽管存在有些不同VBA和VB在结构上仍然十分相似。如果你已
经了解VB会发现学习VBA非常快。相应的学完VBA会给学习VB打下坚实的基础。
理由:选择Excel VBA编程的理由是因为它的计算功能非常强大,是现今任何编程计
算器无法逾越的。它运用围广,计算速度快,计算精度高,合理化显示等。或许很多测量人
员对Excel VBA还有些陌生,主要是大家寄托于计算器、电脑、手机PDA等系列软件使
用。Excel VBA对于大多数测量人员而没有系统学过计算机语言程序设计的人群来讲有一
定含糊,不过只要有基本数学知识、测量常识和逻辑理解的人,都能通过Excel VBA编写
设计出称心如意的测量程序。
目标:基于Excel VBA的测量坐标计算程序的设计目标是将繁琐计算过程转入到计算
机中,利用程序语言的重复性原理,在计算机中可将坐标计算得出更精确的结果,使坐标计
算更加可靠。最终目标是让用户可以通过Excel VBA自行完成坐标计算程序设计。
认识:学习VBA到底需要什么基础和了解些什么?
学习VBA需要认识英文字母、一般的单词(如:函数所用的过程)、数学基础知识、
测量常识、逻辑性思维即可。
在VBA中需要了解VBA的过程、变量、属性、方法、事件、语句等。
Excel VBA程序可以分为“录制宏、自定义函数”,由于录制宏编写计算类程序它限制
了计算涵式过程,而无法达到自定义数据直接运算的目的,所以大家可以通过按钮式点击进
行自定义函数过程(还可以通过窗体定义过程)。
基本常识:
页脚 .
1、类型:常用类型分为Integer(整型)、Single (单精度型)、Double (双精度
型)、String(字符串型)、Variant(数字)、Variant(字符)。
2、变量:Dim 变量名 As 数据类型。例:Dim A As Double
定义变量除了可以使用Dim语句外,比较常的还有:static语句,Private语句,Pu
blic语句。
3、常量:Const 常量名 As 数据类型 = 常量的值。例:Const PI =3.98
常量声明后不可对它再进行赋值。
4、If语句:
If 逻辑表达式 Then ┆ If Q<0 Then
语句块1 ┆ Q=-1
Else ┆ Else
语句块2 ┆ Q=1
End If ┆ End If
5、Do循环语句:
Do Wihle 循环条件 ┆ Do While Cells(j, 1) <> Empty
语句块1 ┆ X = N + (Cells(j, 1) - D) * Cos(F)
[Exit Do] ┆ Y = E + (Cells(j, 1) - D) * Sin(F)
语句块2 ┆ j = j + 1
Loop ┆ Loop
6、调用单元格数值:
With Sheets("单元格名称")┆ With Sheets("坐标计算")
N = .Cells(行, 列)┆ N = .Cells(3, 2)
页脚 .
E = .Cells(行, 列)┆ E = .Cells(4, 2)
D = .Cells(行, 列)┆ D = .Cells(5, 2)
F = .Cells(行, 列)┆ F = .Cells(6, 2)
End With ┆ End With
说明:这里的.Cells(行, 列)表示调用Sheets("坐标计算")单元格中指定数值。
7、MsgBox事件语句:
Private Sub Workbook_Open()┆ Private Sub Workbook_Open()
MsgBox "提示语句" ┆ MsgBox "欢迎使用直线坐标计算程序!"
End Sub ┆ End Sub
主题:通过以上认识相信大家对VBA编程稍有认识与了解,现在将进行测量坐标计
算程序设计。给大家讲解的是“直线坐标中桩计算”的程序如何编写与运算。
思路:根据单元格输入的已知数据并由With过程调用,建立Do循环计算模式自动
填充待求点单元格坐标。
准备:本表需将安全级别设置为“低”,否则运行时点击计算按钮没有反映。
Office Excel 设置方法如下:
Excel 2003版:工具>>>宏>>>安全性>>>选择较低的安全级别>>>重新打
开文件即可运行。
Excel 2007版:Office按钮>>>Excel选项>>>信任中心>>>信任中心设
置>>>宏设置>>>启用所有宏。
版本:程序测试演示版本 Microsoft Office Excel 2003
直线坐标计算原理:
如下图所示,已知直线的起点坐标 、起点切线方位角ao、直线长度L。
页脚 .
直线的止点坐标、止点方位角az计算如下:
已知计算数据:
输入直线要素
起点坐标xo
3378605.445
起点坐标yo
453648.704
起点桩号O
7586.707
计算方位角ao
98.565562
程序操作步骤:
1、设置表格框架(可以根据自己的要求设计),图示如下:
页脚 .
2、在菜单栏上面点击右键弹出下拉式对话框选中“Visual Basic”。
3、调用后的Visual Basic菜单栏显示如下。
页脚 .
4、插入命令按钮(按钮主要用于鼠标点击时触发函数运行)。
5、插入命令按钮后样式,在上面点击右键→命令按钮 对象→编辑→输入“坐标计算”
名称(可以根据自己要求输入)。同样方法添加“数据清除”按钮。
页脚 .
6、在“坐标计算”按钮上面点击右键→查看代码,即可进入代码编辑区域。同样方法编
辑“数据清除”按钮代码。
页脚 .
7、代码输入区域,在蓝色线条位置粘贴“VBA主要源码”代码然后点击左上角Excel
图标即可返回Excel电子表格界面。(这里还可以在VBAProject上面点击右键→插入模
块→将代码粘贴到模块过路径指引,但是在这里就直接将代码粘贴在按钮部减少了添加模块
的繁琐)。
VBA主要源码:
Option Explicit '显式声明模块中的所有变量
页脚 .
Private Sub CommandButton1_Click()'按钮下粘贴以下代码:
Dim j As Intege
r ' ═╮
Dim Ai, Bi, Ci, Di, Ei, Fi, Gi, Hi As Doubl
e ' ║
Dim N, E, D, X, Y, F As Doubl
e ' ║定义变量
Const Pi = 3.979 ' ═╯
With Sheets("坐标计算")
If Trim(.Cells(3, 2)) = "" Then MsgBox "请输入“起点坐标X”!", vbInforma
tion, "提示": Exit Sub ' ═╮
If Trim(.Cells(4, 2)) = "" Then MsgBox "请输入“起点坐标Y”!", vbInforma
tion, "提示": Exit Sub ' ║
If Trim(.Cells(5, 2)) = "" Then MsgBox "请输入“起点桩号K”!", vbInforma
tion, "提示": Exit Sub ' ║检测数据
If Trim(.Cells(6, 2)) = "" Then MsgBox "请输入“起点方位角F”!", vbInfor
mation, "提示": Exit Sub ' ═╯
N = .Cells(3, 2) ' ═╮
E = .Cells(4, 2) ' ║
D = .Cells(5, 2) ' ║调用已知数据
F = .Cells(6, 2) ' ═ ╯
Gi = Int((.Cells(5, 2) + 10) / 10) * 10 ' ═╮
Hi = .Cells(5, 2) + .Cells(7, 2) ' ║
Fi = Abs(F) ' ║
页脚 .
Ai = Int(Fi) ' ║
Bi = (Fi - Ai) * 100 ' ║
Bi = Int(Bi) ' ║
Ci = (Fi - Ai) * 10000 - 100 * Bi ' ║六十进制转换为十进制
Di = Bi + Ci / 60 ' ║
Ei = Ai + Di / 60 ' ║
If F < 0 Then ' ║
F = -Ei ' ║
Else ' ║
F = Ei ' ║
End If ' ═╯
F = F / 180 * Pi
End With
j = 9
Do While Cells(j, 1) <> Empty ' ═╮
X = N + (Cells(j, 1) - D) * Cos(F) ' ║
Y = E + (Cells(j, 1) - D) * Sin(F) ' ║坐标计算核心
Cells(j, 2) = Round(X, 3) ' ║
Cells(j, 3) = Round(Y, 3) ' ║
j = j + 1 ' ║
Loop ' ║