VBA在液压挖掘机设计计算中的应用
2022-05-24王正华
王正华
(徐州徐工矿业机械有限公司,江苏 徐州 221000)
0 引言
VBA是Visual Basic for Applications的缩写,是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。其主要用来扩展Windows的应用程序功能,特别是Microsoft Office软件,也可将其称为一种应用程式视觉化的Basic 脚本。
VBA是基于Visual Basic发展而来的,与VB具有相似的语言结构。从语言结构上讲,VBA是VB的一个子集,它们的语法结构是一样的,两者的开发环境也几乎相同。但是,VB是独立的开发工具,它不需要依附于任何其他应用程序,它有自己完全独立的工作环境和编译、链接系统[1];VBA却没有自己独立的工作环境,它必须依附于某一个主应用程序,VBA专门用于Office的各应用程序中,如Word、Excel、Access等。
液压挖掘机的设计计算主要包括功率和扭矩计算(风扇、先导泵、空调、主泵消耗功率)、回转计算(速度计算、回转力矩计算)、行走计算(行走速度、牵引力、爬坡角度计算)等。这些计算需要诸多的公式,耗时耗力。传统计算说明书采用手工编写计算,存在格式不统一、内容不一致、计算精度不高、容易出错等缺点,而且对设计人员的专业知识水平要求比较高,需要耗费大量精力去编排格式、组织语言,一般编写一套计算说明书需要3~5天时间。为了将这些复杂的计算简单化,作者编写了计算软件[2]。
1 软件界面
为了减少重复劳动,提高工作效率,利用VB.Net编写了液压挖掘机设计计算软件,其界面如图1所示。
图1 液压挖掘机设计计算软件界面
软件界面包括参数输入和计算结果输出两部分,简单明了,单击“计算”按钮,会将计算结果显示在软件计算结果表格中;单击“生成计算说明书”按钮,会将详细的计算过程输出到Word。部分输出结果如图2所示。
图2 液压挖掘机设计计算软件输出
2 VB.Net导出Word格式方法
VB.Net如果要操作Word,首先应添加Word引用,不同的Word版本添加的引用不同,由于安装的是Office2013,因此添加的引用为Microsoft Word 15.0 Object Library,如图3所示。
图3 添加引用
在写详细代码之前需要声明,以便可以直接使用Word中的库函数,具体如下:
Imports Microsoft.Office.Interop
之后编写详细代码,部分代码如下:
With Objdoc.ActiveWindow.Selection
.InsertAfter("1.1 发动机原始参数" & vbCrLf)
.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphLeft
.Font.Bold = True
.Style = "标题2"
.EndOf()
End With
'*******插入表格
Dim Table2 As Table
Table2 = Objdoc.Tables.Add(Range:=Objdoc.ActiveWindow.Selection.Range, NumRows:=5, NumColumns:=2, AutoFitBehavior:=Word.WdAutoFitBehavior.wdAutoFitContent, DefaultTableBehavior:=Word.WdDefaultTableBehavior.wdWord9TableBehavior)
'Table2.Select()
With Table2
.Cell(1, 1).Range.InsertAfter("发动机型号")
.Cell(1, 2).Range.InsertAfter(Model_Engine_Txt.Text)
.Cell(2, 1).Range.InsertAfter("发动机型式")
.Cell(2, 2).Range.InsertAfter(Type_Engine_Txt.Text)
.Cell(3, 1).Range.InsertAfter("发动机额定功率(KW)")
.Cell(3, 2).Range.InsertAfter(RatedPower_发动机)
.Cell(4, 1).Range.InsertAfter("发动机额定转速(rpm)")
.Cell(4, 2).Range.InsertAfter(n_发动机)
.Cell(5, 1).Range.InsertAfter("发动机最大输出扭矩(Nm)")
.Cell(5, 2).Range.InsertAfter(Tmax_发动机 & "” & n_VS_Tmax_Txt.Text & "rpm")
End With
'*****设置表格居中对齐
Table2.Select()
Objdoc.ActiveWindow.Selection.Cells.VerticalAlignment = Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter
Objdoc.ActiveWindow.Selection.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphLeft
Table2.Range.Rows.Alignment = WdRowAlignment.wdAlignRowCenter '表格居中
Objdoc.ActiveWindow.Selection.Font.Size = 12
'*********将光标移动到表格之外
Objdoc.ActiveWindow.Selection.EndKey(Unit:=Word.WdUnits.wdStory, Extend:=1)
Objdoc.ActiveWindow.Selection.EndOf()
With Objdoc.ActiveWindow.Selection
.InsertAfter("1.2 液压泵参数" & vbCrLf)
.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphLeft
.Font.Bold = True
.Style = "标题2"
.EndOf()
End With
Dim Table3 As Table
Table3 = Objdoc.Tables.Add(Range:=Objdoc.ActiveWindow.Selection.Range, NumRows:=7, NumColumns:=2, AutoFitBehavior:=Word.WdAutoFitBehavior.wdAutoFitContent, DefaultTableBehavior:=Word.WdDefaultTableBehavior.wdWord9TableBehavior)
With Table3
.Cell(1, 1).Range.InsertAfter("主泵型号")
.Cell(1, 2).Range.InsertAfter(Model_MainPump_Txt.Text)
.Cell(2, 1).Range.InsertAfter("主泵型式")
.Cell(2, 2).Range.InsertAfter(Type_Mainpump_Txt.Text)
.Cell(3, 1).Range.InsertAfter("主泵最大排量(cc/rev)")
.Cell(3, 2).Range.InsertAfter(V_主泵1)
.Cell(4, 1).Range.InsertAfter("工作压力(MPa)")
.Cell(4, 2).Range.InsertAfter(P_MainPump_Txt.Text)
.Cell(5, 1).Range.InsertAfter("先导泵排量(cc/rev)")
.Cell(5, 2).Range.InsertAfter(V_先导泵)
.Cell(6, 1).Range.InsertAfter("先导系统压力(MPa)")
.Cell(6, 2).Range.InsertAfter(P_先导泵)
.Cell(7, 1).Range.InsertAfter("主泵额定转速")
.Cell(7, 2).Range.InsertAfter(n_主泵)
End With
'*****设置表格居中对齐
Table3.Select()
Objdoc.ActiveWindow.Selection.Cells.VerticalAlignment = Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter
Objdoc.ActiveWindow.Selection.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphLeft
Table3.Range.Rows.Alignment = WdRowAlignment.wdAlignRowCenter '表格居中
Objdoc.ActiveWindow.Selection.Font.Size = 12
'设置列1宽度10cm
Table3.Columns(1).Select()
With Objdoc.ActiveWindow.Selection
.Columns.PreferredWidthType = Word.WdPreferredWidthType.wdPreferredWidthPoints
.Columns.PreferredWidth = ObjWord.CentimetersToPoints(10)
.EndOf()
End With
3 软件测试与调试
编写好程序后,需要对软件进行测试与调试。当程序执行时若发生错误,通常会让用户不知所措,软件测试与调试的目的就是发现问题,找出错误的原因和错误发生的地方,最终排除错误。
一般来说,程序代码的错误可以分为以下3类:
(1) 语法错误。语法错误是程序设计人员不熟悉程序语言的语法或粗心大意所导致的。这类错误是最容易调试的,而且在程序编写时就可以发现。
(2) 执行时期的错误。执行时期程序代码发生的错误通常是不可预见的,例如在程序执行时找不到某个磁盘路径、用户权限不足等。为了避免执行时期错误的发生,作者使用了Try……Catch异常处理语句,以保证当软件发生不可预见错误时,给出错误原因,不会崩溃。
(3) 逻辑错误。所谓的逻辑错误是指发生思考逻辑上的错误,这类错误最难检测。逻辑错误主要表现在程序运行后,得到的结果与预期设想的不一致,这就有可能是出现了逻辑错误。通常出现逻辑错误的程序都能正常运行,系统不会给出提示信息,所以很难发现。要发现和改正逻辑错误需要仔细阅读和分析程序。
为了保证计算的准确性,作者采用手工计算和软件计算进行比对,最终验证了软件设计的正确性。
4 结束语
本软件的开发解决了传统手工计算工作量大、格式不统一、效率低、易发生错误的难题。经过测试,输出一套计算说明书只需要几秒钟即可完成,极大地提高了工作效率,缩短了产品开发时间。