吴云霞+陈丽芳+黄新平
摘 要:随着信息化的不断发展,计算机早已成为日常办公的工具。其中Microsoft Office Excel有着强大的数据处理、统计分析和制图等功能,可方便绘出各种专业图表,实现图、文、表的完美结合。VBA编程可将各种操作集成起来,使复杂的操作简单化、批量化,使处理速度大大地提高,可以开发出非常具有实用价值的应用程序。文章旨在探索在Excel中应用VB编辑器编写大断面测量计算程序,完成大断面测量的分析计算自动绘制大断面图的任务。
关键词:VBA;大断面测量;计算
中图分类号:TP391.72;U172 文献标识码:A 文章编号:1006-8937(2016)03-0051-02
1 VBA简介
VBA(Visual Basic for Applications)基于Visual Basic for Windows发展而来,可用于开发Windows环境下的各类应用程序,是一种可视化的、面向对象的、采用事件驱动方式的结构化高级程序设计语言。它具有高效率、简单易学及功能强大的特点。用户可以轻易把日常工作利用VBA程序代码,高效、快速地编制出Windows环境下功能强大、图形界面丰富的应用软件系统,使重复任务自动化,提高工作效率。
在Excel中,由于VBA可以直接应用Office套装软件的各项强大功能,所以用Excel作为开发平台,对于程序设计人员的程序设计和开发更加方便快捷,只需要直接使用,减少了很多编程工作。
2 大断面测量
传统大断面测量工作,首先是进行岸上部分的水准测量和水下部分的水深测量。岸上部分采用四等水准引测,实测前应清除杂草和障碍物,在地形的转折点打入有编号的木桩作为高程的测量点。水下部分采用有效的测深方法测得水体水面到河床面得水深。
2.1 大断面测量计算
以某站某年汛前大断面测量计算为例,采用VBA编程在Excel平台中实现岸上部分的水准测量计算工作。相关情况见表1。
利用ExcelVBA编程实现计算工作,计算的部分代码如下:
………
aa = [d65536].End(xlUp).Row
For i = 5 + 2 To aa Step 2 '有间视平均高差
a1 = Cells(i, 6)
b1 = Cells(i + 1, 6)
If Cells(i, 6) <> "" And Cells(i + 1, 6) <> 0 Then
If Cells(i, 6) - Cells(i + 1, 6) > 0.05 Then
Cells(i, 7) = (a1 + (b1 + 0.1)) / 2
End If
If Cells(i, 6) - Cells(i + 1, 6) < 0.05 Then
Cells(i, 7) = (a1 + (b1 - 0.1)) / 2
End If
If Cells(i, 6) - Cells(i + 1, 6) < 0.02 And Cells(i, 6) - Cells(i +1, 6) > -0.02 Then
Cells(i, 7) = (a1 + b1) / 2
End If
End If
If Cells(i, 6) <> "" And Cells(i + 1, 6) = 0 Then '无间视平均高差的计算
Cells(i, 7) = Cells(i, 6)
End If
Next i
…….
......
For i = 5 + 2 To aa Step 2 '有间视平均高差
a1 = Cells(i, 6)
b1 = Cells(i + 1, 6)
If Cells(i, 6) <> "" And Cells(i + 1, 6) <> 0 Then
If Cells(i, 6) - Cells(i + 1, 6) > 0.05 Then
Cells(i, 7) = (a1 + (b1 + 0.1)) / 2
End If
If Cells(i, 6) - Cells(i + 1, 6) < 0.05 Then
Cells(i, 7) = (a1 + (b1 - 0.1)) / 2
End If
If Cells(i, 6) - Cells(i + 1, 6) < 0.02 And Cells(i, 6) - Cells(i + 1, 6) > -0.02 Then
Cells(i, 7) = (a1 + b1) / 2
End If
End If
If Cells(i, 6) <> "" And Cells(i + 1, 6) = 0 Then '
无间视平均高差的计算
Cells(i, 7) = Cells(i, 6)
End If
Next i
For j = 5 To aa - 2 Step 2
If Cells(j + 2, 5) <> "" Then '高程计算
Cells(j + 2, 10) = Cells(j, 10) '有间视
Else
Cells(j + 2, 9) = Cells(j, 10) + Cells(j + 2, 7) - Cells(j + 2, 8)
Cells(j + 2, 10) = Cells(j + 2, 9)
End If
If Cells(j + 2, 5) <> "" Then Cells(j + 2, 9) = Cells(j + 2, 10) + Cells(j + 2, 7) - Cells(j + 2, 8)
Next j
......
2.2 大断面测量分析绘图
在每年的汛前大断面测量中,利用测量的数据进行繁琐的人工绘制大断面图,为了更好的提高工作效率,使重复工作任务自动化,利用VBA的制图功能自动绘制大断面图。
通过上面的对大断面测量计算,利用ExcelVBA编程实现大断面的绘图工作。大断面绘制示意图,如图1所示。
在绘制大断面图时,程序通过提示对话框,人工给出大断面的左右岸的标志,如图2所示。
VBA编程实现大断面的绘图工作代码如下:
Sheets("Sheet2").Select()
bb = [b65536].End(xlUp).Row
a = InputBox("请输入大断面成果开始岸别:1为右岸,2为左岸")
If a = 1 Then Cells(1, 1) = "右岸" : Cells(bb, 1) = "左岸"
If a = 2 Then Cells(1, 1) = "左岸" : Cells(bb, 1) = "右岸"
Cells(2, 1) = "1"
For i = 3 To bb - 1
Cells(i, 1) = Cells(i - 1, 1) + 1
Next i
......
Sheets("Sheet1").Select()
Selection.AutoFilter()
Charts.Add after:=Worksheets("Sheet1") '
在"Sheet1"工作表之后添加新图表工作表。
ActiveChart.ChartType = xlXYScatterSmooth '
图表类型为XY平滑线散点图。
…….
ActiveChart.SetSourceData(Source:=Sheets("sheet2").Range("B:C"), PlotBy:=xlColumns) '
图表数据来源于"结点坐标"工作表的A1至B69单元格,且按列绘图。
ActiveChart.Location Where:=xlLocationAsNewSheet
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "大断面图" '图表标题"节点坐标"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "起点距(m)" 'x轴标题"x"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "河底高程(m)" 'y轴标题"y"
End With
……
上述代码中有关变量已在相应地方作定义,并赋值。鉴于篇幅,不作详细介绍。
利用VBA编程实现上述分析计算与绘制大断面图。在实际计算工作过程中省去了人为的重复计算,有效避免了人工计算错误,极大地提高了工作效率。
3 结 语
大断面测量自动的分析计算绘图程序已在实际工作过程中得到应用,经检验,计算成果合理,效率高,成果图表绘制较规范,是一款较为实用的软件。在许多水文分析计算的工作中,运用ExcelVBA编程,可以解决很多需要重复、繁杂的统计计算工作,并降低错误发生率,为水文工作者减轻负担,提高工作效率。
参考文献:
[1] 郝安华.Excel VBA在GPS坐标转换计算中的应用[J].辽宁科技学院学 报,2011,(34).