Word VBA编制矩形溢洪道水力计算程序第一稿

更新时间:2024-05-28 12:45:02 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Word VBA编制矩形溢洪道水力计算程序

1 概述

1.1 溢洪道水力计算

溢洪道水力计算是水库工程设计中的重要内容之一,分为上游明渠段和下游陡坡段。上游明渠段按明渠均匀流计算正常水深,下游陡坡段随着泄洪槽底比降及底宽的变化,通常按断面能量守恒来试算水深,试算工作量较大。本文通过Word程序内置宏语言VBA编制的矩形溢洪道水深计算程序可轻松解决试算工作量大的麻烦,为溢洪道设计方案选型提供了有力的计算工具,计算准确且大大提高工作效率。程序在安装Word2000以上版本的电脑上即可运行,利用Word程序内置宏语言VBA执行程序,在将工程设计数据及溢洪道几何尺寸数据输入后,点击“水力计算”命令按钮,可计算出溢洪道明渠段及各陡坡段(共设5段陡坡)水深、流速、掺气水深等数据,再点击“文本输出”命令按钮可输出溢洪道水深计算的文本及水面线计算表。 1.2 VBA简介

VBA(Visual Basic For Application)是微软公司Office办公软件中内置的宏语言,利用该语言可扩展Word、Excel等程序功能,创建专业程序工具。Word VBA的打开是在Word程序中点击下拉菜单“工具”→“宏”→“Visual Basic编辑器”。若要执行已创建的宏,首先需将下拉菜单“工具”→“宏”→“安全性”设为中或低,确定后关闭Word程序然后启动,再点击下拉菜单“工具”→“宏”→“宏?”,选取所要运行的宏名,点击“运行”命令按钮,即可运行所创建的宏。

2 程序编制

2.1 创建程序界面

打开Word程序,点击下拉菜单“工具”→“宏”→“Visual Basic编辑器”,打开Microsoft Visual Basic文档,点击下拉菜单“插入”→“用户窗体”,出现UserForm窗体及工具箱,点击工具条上“属性窗口”按钮,调出属性窗口。利用工具箱及属性窗口,在UserForm窗体中创建27个标签控件、53个文字框控件、3个框架控件、3个命令按钮控件,创建的程序界面如图1所示。

1

图1 程序界面

创建的主要控件属性见表1。

表1 主要控件属性表 序号 1 2 3 4

2.2 程序代码编写

①双击用户窗体,进入程序代码编辑器,在“(通用)”中用Private语句声明129个程序变量,数据类型为Single。

②双击命令按钮“水力计算”控件,编写Click事件代码如下: Private Sub cmdcpu_Click() t1 = Val(TextBox1.Text) t2 = Val(TextBox2.Text) t3 = Val(TextBox3.Text) t4 = Val(TextBox4.Text) t5 = Val(TextBox5.Text)

2

名称 Frmyhd Cmdcpu Cmdexp Cmdcnl Caption(标题) 矩形溢洪道水力计算程序(DHMZY)版权所有 水力计算 文本输出 取消 备注 用户窗体 命令按钮 命令按钮 命令按钮 t6 = Val(TextBox6.Text) t7 = Val(TextBox7.Text) t8 = Val(TextBox8.Text) t9 = Val(TextBox9.Text) t10 = Val(TextBox10.Text) t11 = Val(TextBox11.Text) t12 = Val(TextBox12.Text) t13 = Val(TextBox13.Text) t14 = Val(TextBox14.Text) t15 = Val(TextBox15.Text) t16 = Val(TextBox16.Text) t17 = Val(TextBox17.Text) t18 = Val(TextBox18.Text) t19 = Val(TextBox19.Text) t20 = Val(TextBox20.Text) t21 = Val(TextBox21.Text) t22 = Val(TextBox22.Text) t23 = Val(TextBox23.Text)

If t4 <= 0 Then MsgBox \计算数据必须输入后再点击计算按钮!\警告\

If t5 <= 0 Then MsgBox \计算数据必须输入后再点击计算按钮!\警告\ a = 1.05 g = 9.8

If t18 <= 0 Then MsgBox \请正确输入明渠段底宽!\警告\ q = t4 / t18

hk = (a * q ^ 2 / g) ^ (1 / 3) TextBox24.Text = Str(hk)

'计算0-0断面参数及正常水深h0 vk = q / hk

Ek = hk + a * vk ^ 2 / 2 / g wk = t18 * hk xk = t18 + 2 * hk rk = wk / xk

ck = 1 / t5 * rk ^ (1 / 6) j0 = vk ^ 2 / ck ^ 2 / rk Dim z0 As Single For z0 = 1 To 30000 w0 = t18 * z0 / 1000 x0 = t18 + 2 * z0 / 1000 r0 = w0 / x0

c0 = 1 / t5 * r0 ^ (1 / 6) s0 = (t6 ^ 2 + t12 ^ 2) ^ 0.5

3

If s0 <= 0 Then MsgBox \请正确输入明渠段水平段长!\警告\Sub

i0 = t12 / s0

If Int(w0 * c0 * (r0 * i0) ^ 0.5 * 10 + 5) / 10 = Int(t4 * 10 + 5) / 10 Then Exit For

Next z0

h0 = z0 / 1000

If h0 >= 30 Then MsgBox \计算数据溢出错误!\警告\ Label30.Caption = \正常水深h0=\

'计算1-1断面水力参数 Dim z1 As Single For z1 = 1 To 30000

If t19 <= 0 Then MsgBox \请正确输入陡坡1底宽!\警告\ w1 = t19 * z1 / 1000 v1 = t4 / w1

x1 = t19 + 2 * z1 / 1000 r1 = w1 / x1

c1 = 1 / t5 * r1 ^ (1 / 6) s1 = (t7 ^ 2 + t13 ^ 2) ^ 0.5

If s1 <= 0 Then MsgBox \请正确输入陡坡1水平段长!\警告\Sub

i1 = t13 / s1

E1 = z1 / 1000 + a * v1 ^ 2 / 2 / g j1 = v1 ^ 2 / c1 ^ 2 / r1

If Int((Ek + i1 * s1) * 10 + 5) / 10 = Int((E1 + (j0 + j1) / 2 * s1) * 10 + 5) / 10 Then Exit For Next z1

h1 = z1 / 1000

'If h1 >= 30 Then MsgBox \计算数据溢出错误!\警告\ TextBox25.Text = Str(h1)

'计算2-2断面水力参数 Dim z2 As Single For z2 = 1 To 30000

If t20 <= 0 Then MsgBox \请正确输入陡坡2底宽!\警告\ w2 = t20 * z2 / 1000 v2 = t4 / w2

x2 = t20 + 2 * z2 / 1000 r2 = w2 / x2

c2 = 1 / t5 * r2 ^ (1 / 6) s2 = (t8 ^ 2 + t14 ^ 2) ^ 0.5

If s2 <= 0 Then MsgBox \请正确输入陡坡2水平段长!\警告\Sub

4

i2 = t14 / s2

E2 = z2 / 1000 + a * v2 ^ 2 / 2 / g j2 = v2 ^ 2 / c2 ^ 2 / r2

If Int((E1 + i2 * s2) * 10 + 5) / 10 = Int((E2 + (j1 + j2) / 2 * s2) * 10 + 5) / 10 Then Exit For Next z2

h2 = z2 / 1000

If h2 >= 30 Then MsgBox \计算数据溢出错误!\警告\ TextBox26.Text = Str(h2)

'计算3-3断面水力参数 Dim z3 As Single For z3 = 1 To 30000

If t21 <= 0 Then MsgBox \请正确输入陡坡3底宽!\警告\ w3 = t21 * z3 / 1000 v3 = t4 / w3

x3 = t21 + 2 * z3 / 1000 r3 = w3 / x3

c3 = 1 / t5 * r3 ^ (1 / 6) s3 = (t9 ^ 2 + t15 ^ 2) ^ 0.5

If s3 <= 0 Then MsgBox \请正确输入陡坡3水平段长!\警告\Sub

i3 = t15 / s3

E3 = z3 / 1000 + a * v3 ^ 2 / 2 / g j3 = v3 ^ 2 / c3 ^ 2 / r3

If Int((E2 + i3 * s3) * 10 + 5) / 10 = Int((E3 + (j2 + j3) / 2 * s3) * 10 + 5) / 10 Then Exit For Next z3

h3 = z3 / 1000

If h3 >= 30 Then MsgBox \计算数据溢出错误!\警告\ TextBox27.Text = Str(h3)

'计算4-4断面水力参数 Dim z4 As Single For z4 = 1 To 30000

If t22 <= 0 Then MsgBox \请正确输入陡坡4底宽!\警告\ w4 = t22 * z4 / 1000 v4 = t4 / w4

x4 = t22 + 2 * z4 / 1000 r4 = w4 / x4

c4 = 1 / t5 * r4 ^ (1 / 6) s4 = (t10 ^ 2 + t16 ^ 2) ^ 0.5

If s4 <= 0 Then MsgBox \请正确输入陡坡4水平段长!\警告\Sub

5

i4 = t16 / s4

E4 = z4 / 1000 + a * v4 ^ 2 / 2 / g j4 = v4 ^ 2 / c4 ^ 2 / r4

If Int((E3 + i4 * s4) * 10 + 5) / 10 = Int((E4 + (j3 + j4) / 2 * s4) * 10 + 5) / 10 Then Exit For Next z4

h4 = z4 / 1000

If h4 >= 30 Then MsgBox \计算数据溢出错误!\警告\ TextBox28.Text = Str(h4)

'计算5-5断面水力参数 Dim z5 As Single For z5 = 1 To 30000

If t23 <= 0 Then MsgBox \请正确输入陡坡5底宽!\警告\ w5 = t23 * z5 / 1000 v5 = t4 / w5

x5 = t23 + 2 * z5 / 1000 r5 = w5 / x5

c5 = 1 / t5 * r5 ^ (1 / 6) s5 = (t11 ^ 2 + t17 ^ 2) ^ 0.5

If s5 <= 0 Then MsgBox \请正确输入陡坡5水平段长!\警告\Sub

i5 = t17 / s5

E5 = z5 / 1000 + a * v5 ^ 2 / 2 / g j5 = v5 ^ 2 / c5 ^ 2 / r5

If Int((E4 + i5 * s5) * 10 + 5) / 10 = Int((E5 + (j4 + j5) / 2 * s5) * 10 + 5) / 10 Then Exit For Next z5

h5 = z5 / 1000

If h5 >= 30 Then MsgBox \计算数据溢出错误!\警告\ TextBox29.Text = Str(h5) TextBox30.Text = Str(Ek) TextBox31.Text = Str(E1) TextBox32.Text = Str(E2) TextBox33.Text = Str(E3) TextBox34.Text = Str(E4) TextBox35.Text = Str(E5)

TextBox36.Text = Str(Int(vk * 1000) / 1000) TextBox37.Text = Str(Int(v1 * 1000) / 1000) TextBox38.Text = Str(Int(v2 * 1000) / 1000) TextBox39.Text = Str(Int(v3 * 1000) / 1000) TextBox40.Text = Str(Int(v4 * 1000) / 1000) TextBox41.Text = Str(Int(v5 * 1000) / 1000) ξ = 1.4

6

TextBox42.Text = Str(1#) TextBox43.Text = Str(ξ) TextBox44.Text = Str(ξ) TextBox45.Text = Str(ξ) TextBox46.Text = Str(ξ) TextBox47.Text = Str(ξ)

h1s = (1 + ξ * v1 / 100) * h1 h2s = (1 + ξ * v2 / 100) * h2 h3s = (1 + ξ * v3 / 100) * h3 h4s = (1 + ξ * v4 / 100) * h4 h5s = (1 + ξ * v5 / 100) * h5 TextBox48.Text = Str(hk) TextBox49.Text = Str(h1s) TextBox50.Text = Str(h2s) TextBox51.Text = Str(h3s) TextBox52.Text = Str(h4s) TextBox53.Text = Str(h5s) cmdexp.Enabled = True End Sub

③双击命令按钮“文本输出”控件,编写Click事件代码如下:

Private Sub cmdexp_Click()

If t4 <= 0 Then MsgBox \计算数据必须输入后再点击计算按钮!\警告\

If t5 <= 0 Then MsgBox \计算数据必须输入后再点击计算按钮!\警告\ '计算文本输出

ActiveDocument.Content.InsertAfter Text:=Chr(10) + Space(4) + \溢洪道水力计算\ ActiveDocument.Content.InsertAfter Text:=Chr(10) + Space(4) + \一、基本资料\ ActiveDocument.Content.InsertAfter Text:=Chr(10) + Space(4) + \设计工况下(\+ Format(t1) + \年一遇洪水标准)水位:H=\,泄洪流量\\。\

ActiveDocument.Content.InsertAfter Text:=Chr(10) + Space(4) + \溢洪道底高程\Format(t3) + \,底宽\,为砼结构,糙率取n=0\。\

ActiveDocument.Content.InsertAfter Text:=Chr(10) + Space(4) + \二、水力计算\ ActiveDocument.Content.InsertAfter Text:=Chr(10) + Space(4) + \溢洪道进口\+ Format(t6) + \为明渠段,比降为\,底宽b=\+ Format(t18) + \,此段按明渠均匀流计算,得正常水深h0=\+ Format(Int(h0 * 1000) / 1000) + \,向下为陡坡段,底宽由\变为\。\ ActiveDocument.Content.InsertAfter Text:=Chr(10) + Space(4) + \、计算临界水深hk\ ActiveDocument.Content.InsertAfter Text:=Chr(10) + Space(12) + \α*q^2/g)^(1/3)\

7

ActiveDocument.Content.InsertAfter Text:=Chr(10) + Space(6) + \式中:q=\+ Format(t4) + \

ActiveDocument.Content.InsertAfter Text:=Chr(10) + Space(12) + \ ActiveDocument.Content.InsertAfter Text:=Chr(10) + Space(12) + \α=1.05\

ActiveDocument.Content.InsertAfter Text:=Chr(10) + Space(8) + \则 hk=(α*q^2/g)^(1/3)=\

ActiveDocument.Content.InsertAfter Text:=Chr(10) + Space(4) + \、推求水面线\ ActiveDocument.Content.InsertAfter Text:=Chr(10) + Space(4) + \取临界水深处为0—0断面,向下依次为1—1断面、2—2断面等,计算1—1断面处水深h1\

ActiveDocument.Content.InsertAfter Text:=Chr(10) + Space(4) + \第一陡坡长度计算:水平段长\,高差为\,斜坡长为L1=(\+ \,该段比降i=\+ Format(t13) + \+ Format(Int(s1 * 1000) / 1000) + \+ Format(Int(i1 * 10000) / 10000) + \。\

ActiveDocument.Content.InsertAfter Text:=Chr(10) + Space(4) + \按式:E0+i1*ΔS=E1+j*ΔS进行试算\

ActiveDocument.Content.InsertAfter Text:=Chr(10) + Space(4) + \式中:E0+i1*ΔS=\+ Format(Int(Ek * 1000) / 1000) + \Format(Int(s1 * 1000) / 1000) + \ ActiveDocument.Content.InsertAfter Text:=Chr(10) + Space(4) + \设 h1=\+ Format(Int(h1 * 1000) / 1000) + \时,则\

ActiveDocument.Content.InsertAfter Text:=Chr(10) + Space(4) + \ΔS=\+ Format(Int(E1 * 1000) / 1000) + \\1000) / 1000) + \

If h1 < 1 Then ActiveDocument.Content.InsertAfter Text:=Chr(10) + Space(4) + \故h1=0\即为所求的1—1断面处水深h1。\

If h1 >= 1 Then ActiveDocument.Content.InsertAfter Text:=Chr(10) + Space(4) + \故h1=\即为所求的1—1断面处水深h1。\(此段程序代码略) '水面线计算表输出

ActiveDocument.Content.InsertAfter Text:=Chr(10) + Space(35) + \水面线计算表\ 插入表格

cmdexp.Enabled = False End Sub

④双击命令按钮“取消”控件,编写Click事件代码如下: Private Sub cmdcnl_Click() Unload frmyhd End Sub

⑤“插入表格”子程序代码编写如下: Private Sub 插入表格()

8

(此段程序代码略) End Sub

2.3 程序运行结果

程序运行后,先输入设计数据及溢洪道几何尺寸数据,分为明渠段及5个陡坡段的水平段长、底高差、底宽,然后点击“水力计算”命令按钮,即可得计算结果的水深、流速、掺气水深等相关数据,点击“文本输出”按钮,可输出Word计算文本及水面线计算表格,点击“取消”命令按钮,则取消程序计算。

3 结束语

中小型水库除险加固工程中,溢洪道方案设计的水力计算如采用手工计算,每条溢洪道需2天计算时间。若使用本矩形溢洪道水力计算程序计算需时5分钟,且保证了计算的准确性,并可反复改变各段段长、高差、底宽,最后可输出计算文本与表格,大大减少计算时间与劳动强度,显著提高了工作效率。

9

本文来源:https://www.bwwdw.com/article/vu67.html

Top