浅析Excel VBA在中小河流河道水面线分析中的应用

2012-06-04 01:30胡磊
城市建设理论研究 2012年13期
关键词:表格

胡磊

摘要:Excel VBA是基于Excel的一套程序语言。应用Excel VBA 进行电算是减轻设计人员负担,提高设计效率的有效方法。

关键词:Excel VBA;表格;中小河流;水面线;

Abstract: Excel VBA is a programming language based on Excel. Application of Excel VBA electric regarded as an effective way to alleviate the burden on the designers to improve design efficiency.

Keywords: Excel VBA; form; medium and small rivers; the water line;

中图分类号:TU195 文献标识码:A文章编号:2095-2104(2012)05-0020-02

Visual Basic for Applications(VBA)是一种Visual Basic的一种宏语言,VBA 是基于Visual Basic 发展而来的,它们具有相似的语言结构。Visual Basic 作为一套独立的 Windows 系统开发工具,可用于开发Windows 环境下的各类应用程序,是一种可视化的、面向对象的、采用事件驱动方式的结构化高级程序设计语言。它具有高效率、简单易学及功能强大的特点。VB 的程序语言简单、便捷,利用其事件驱动的编程机制,可以高效、快速地编制出 Windows 环境下功能强大、图形界面丰富的应用软件系统。

近年来中小河流开发治理工程,在全国各大省市大量开展,按照 “十二五” 规划,期间需完成5000多条中小河流重点河段的治理任务,涉及8000多个项目,时间紧、任务重、设计质量要求高,利用Excel VBA分析计算中小河流河道水面线,是提高设计效率的有效方法。

一、河道水面线计算方法

本文河道水面线采用天然河道非均匀渐变流的伯努利方程进行计算。

Z上+α上= Z下+α下+ hw

式中:Z上、V上———上游断面的水位、流速;

Z下、V下———下游断面的水位、流速;

hw=hy+hj ———两断面间水头损失;

hy=(J上+J下)ΔL /2———沿程水头损失;

——沿程摩阻坡度;

ε———两断面平均流速、平均流速系数;

———平均水力半径;

ΔL———两断面间距;

α下———系数,取1.0;

二、利用Excel VBA程序语言计算

首先新建一个Excel文档,在表格第6行输入“起始水位”、“河道桩号”、“河段长度”、“河道底宽”、“平台高度”、 “平台宽”、 “平台以上坡比”、 “河床糙率” 、“流量”标题项,在第7-18行输入相关数据。

在表格第84、85行输入“断面编号”、“河道桩号”、“断面水位”、“ 河底高程”、“ 断面流速v”、“ 河段长度l”等,

E86至E100=“=IF((C86-D86)>F7,E7*F7+((E7+2*G7)*2+(C86-D86-F7)*H7*2)

*(C86-D86-F7)/2,E7*(C86-D86))”

F86至F100=“=IF((C86-D86)>F7,E7+2*F7+2*G7+((C86-D86-F7)^2+

((C86-D86-F7)*H7)^2)^0.5,E7+2*(C86-D86))”

N87至N100=“=K87^2/(G87^(1/6)/I87)^2/G87”

在菜单栏位置右击点击“窗体”,弹出窗体对话框,选择“按钮”,创建一按钮于表格左上角位置,将按钮名称改为“计算”。

点击菜单栏中“工具”—“宏”—“Visual Basic编辑器”,弹出对话框;双击Excel文档中“计算”按钮,弹出代码编辑对话框,先定义局部变量i、j为长整型,利用For-Nxet循环语句内嵌两个IF语句,通过C87单元格数据不断试算,使得M87与S87单元格内的数据一致(保留两位小数),进行下一行数据试算,所求得的断面水位Z即为河道水位,编辑代码如下:

Private Sub CommandButton1_Click()

Dim i As Long定义局部变量i为长整型

Dim j As Long定义局部变量j为长整型

i = 1附值i=1

Cells(87, 3) = Cells(86, 3) - 0.5附值表格C87=C86-0.5

Cells(82, 3)= COUNTIF(B8:B20,">=0")-1

附值表格C82等于B8至B20单元格中非零数值的个数

For i = 1 To 790000 i循环79万次

IfRound(Cells(87 + j, 13), 2) = Round(Cells(87 + j, 19), 2) Then

如果M(87+j)单元格等于M(87+j)单元格,保留两位小数;则移动到下一行进行试算

j = j + 1

If j = Cells(82, 3) Then

如果j等于C82单元格内数值,则退出For循环;

Exit For

End If

Cells(87 + j, 3) = Cells(86 + j, 3) - 0.5

结束If条件,附于下一行C(87+j)= C(87+j)-0.5

Else

如果M(87+j)单元格不等于M(87+j)单元格,保留两位小数;

Cells(87 + j, 3) = Cells(87 + j, 3) + 0.00002

附于C(87+j)= C(87+j)+0.00002值

End If

结束If语句,进行For循环

Next i

End Sub

三、运行调试

按上述代码编辑完成后,单击“计算”按钮,运行程序;如果程序运行过程中出现死循环,则需检查程序中C87单元格循环起始数据是否过小,调整Cells(87, 3) = Cells(86, 3) - 0.5语句中0.5的数值即可。再点击“计算”按钮,运行程序。

参考文献:

1、《水工设计手册(第一卷:基础理论)》 华东水利学院 水利电力出版社;

2、《Excel2003函数与图表》 人民邮电出版社(2006.7);

3、《Excel高效办公-VBA入门与实战》 人民邮电出版社(2007.2);

4、《Visual Basic 开发 技术大全(第二版)》人民邮电出版社(2009.10);

5、《《堤防工程设计规范》(GB50286-98)中国计划出版社;

6、《水利工程水利计算规范》(SL104-95) 中国水利水电出版社;

注:文章内所有公式及图表请以PDF形式查看。

猜你喜欢
表格
组成语
履历表格这样填
表格图的妙用
借助“表格”解答稍复杂分数问题