VBA实现电气操作票自动生成

(整期优先)网络出版时间:2021-08-18
/ 4

VBA实现电气操作票自动生成

余志荣

国家能源集团黄金埠发电有限公司,江西上饶 335101

摘 要:借助Excel VBA模块化编程,解决重复的人工查找替换工作,且能够经简单地操作实现电气操作票自动生成,避免因删除文件或修改关键词导致出错,影响操作安全性。

关键词:VBA语言;火电厂;电气操作票





1 概述

常规电气操作票相似度较高,只需要修改关键字段即可变更。但在实际工作中,工作人员常为了简便,会直接搜索相关电气操作票,用关键字段替换后保存导致原票实效。因此,为了规避此类重复人工操作,使用Excel VBA程序设计开发自动生成功能,按照统一的模板生成不同设备的电气操作票,从而提高了工作人员的效率,且可减少电气操作票错误率。

2 项目设计

电气操作票设备的开关转换状态共计有10种,但设备的操作主要区别可分为测绝缘和不测绝缘两类。因此,可针对两种类型分别设计通用代码模块,但主要功能都是通过创建Word对象来打开对应的模板电气操作票,查找关键字段,用Excel单元格的内容进行替换。

在Excel文件中,集成6KV设备的关键字段数据库,设备关键字段可根据需求进行删除或者增加。在需要生成一张指定的电气操作票时,可使用命令按钮(ActiveX控件),在CommandButton1_Click()事件代码中运行CreateTickets()程序,在输入设备开关转换状态序号(0~9)及6KV设备关键字段的行号后,即可在指定路径下找到所要电气操作票。

1 开关转换状态

序号

状态

1

由冷备用状态转为检修状态

2

由冷备用状态转为热备用状态

3

由热备用状态转为检修状态

4

由热备用状态转为冷备用状态

5

由检修状态转为热备用状态(不测绝缘)

6

由检修状态转为冷备用状态

7

由冷备用状态转为热备用状态(测绝缘)

8

冷备用状态测绝缘

9

由检修状态转为冷备用状态(测绝缘)

10

由检修状态转为热备用状态(测绝缘)


2.1 设备不测绝缘类代码设计

由表1可知,在不测绝缘类别中,共计有6种开关转换状态。根据自定义的模板电气操作票内容,可将关键字段统一写成“#X机某设备电机XXXX”。

“#X机某设备电机XXXX”关键字段各关键词代表的含义:

#X机-机组号;某设备-6KV设备名称;XXXX-设备开关编号。

因此,针对这6种开关转换状态的电气操作票,可将代码写成一个不测绝缘类通用程序模块。

利用该程序模块,可在打开自定义模板电气操作票后,自动查找关键字段“#X机某设备电机XXXX”,并将该关键字段替换成Excel单元格Cells(i, k)内容,达到自动生成设备电气操作票的目的。

2.2 设备测绝缘类代码设计

由表1可知,在测绝缘类别中,共计有4种开关转换状态。根据自定义模板电气操作票内容,可将关键字段统一写成“#X机某设备电机XXXX”及“#X机某设备电机”。

测绝缘类通用程序模块可实现关键字段“#X机某设备电机XXXX”及“#X机某设备电机”分别被替换成Excel单元格Cells(i, k)及Cells(i, k + 1)的内容。

3 程序实现

程序由主程序及子程序两部分组成。

3.1 主程序点击事件

点击事件CommandButton1_Click()代码如下:

Private Sub CommandButton1_Click()

Call CreateTickets '引用子程序代码

End Sub

3.2 子程序执行程序

CreateTickets()子过程代码如下:

Sub CreateTickets()

'功能:对多个设备进行自动电气操作票生成

Application.Volatile '实时更新

Dim WordDoc, WordApp

Dim i, j As Integer '定义整数值,设备对应的行数i、 开关转换状态序号j

Dim k As Integer '定义列数值k

Dim number(0 To 9) As String '定义字符串一维数组,存储电气操作票文件地址,例如:D:\电气操作票系统\模板电气操作票\模板0-#X机某设备电机XXXX开关由冷备用状态转为检修状态.docx

'将自定义模板电气操作票文件地址赋值给数组

number(0) = "D:\电气操作票系统\模板电气操作票\模板0-#X机某设备电机XXXX开关由冷备用状态转为检修状态.docx"

number(1) = "D:\电气操作票系统\模板电气操作票\模板1-#X机某设备电机XXXX开关由冷备用状态转为热备用状态.docx"

number(2) = "D:\电气操作票系统\模板电气操作票\模板2-#X机某设备电机XXXX开关由热备用状态转为检修状态.docx"

number(3) = "D:\电气操作票系统\模板电气操作票\模板3-#X机某设备电机XXXX开关由热备用状态转为冷备用状态.docx"

number(4) = "D:\电气操作票系统\模板电气操作票\模板4-#X机某设备电机XXXX开关由检修状态转为热备用状态(不测绝缘).docx"

number(5) = "D:\电气操作票系统\模板电气操作票\模板5-#X机某设备电机XXXX开关由检修状态转为冷备用状态.docx"

number(6) = "D:\电气操作票系统\模板电气操作票\模板6-#X机某设备电机XXXX开关由冷备用状态转为热备用状态(测绝缘).docx"

number(7) = "D:\电气操作票系统\模板电气操作票\模板7-#X机某设备电机XXXX开关冷备用状态测绝缘.docx"

number(8) = "D:\电气操作票系统\模板电气操作票\模板8-#X机某设备电机XXXX开关由检修状态转为冷备用状态(测绝缘).docx"

number(9) = "D:\电气操作票系统\模板电气操作票\模板9-#X机某设备电机XXXX开关由检修状态转为热备用状态(测绝缘).docx"

Dim content(0 To 9) As String '定义开关转换状态一维数组,例如:由冷备用状态转为检修状态.docx;在生成文件名时会用到

content(0) = "由冷备用状态转为检修状态.docx"

content(1) = "由冷备用状态转为热备用状态.docx"

content(2) = "由热备用状态转为检修状态.docx"

content(3) = "由热备用状态转为冷备用状态.docx"

content(4) = "由检修状态转为热备用状态(不测绝缘).docx"

content(5) = "由检修状态转为冷备用状态.docx"

content(6) = "由冷备用状态转为热备用状态(测绝缘).docx"

content(7) = "冷备用状态测绝缘.docx"

content(8) = "由检修状态转为冷备用状态(测绝缘).docx"

content(9) = "由检修状态转为热备用状态(测绝缘).docx"

j = InputBox("请输入开关转换状态序号(0~9)")

i = InputBox("请输入设备对应的行数(≥3)")

k = 3 '将列数值赋值为3

Application.DisplayAlerts = False '返回或设置运行宏时的一些警告或消息处理

Application.ScreenUpdating = False '关闭屏幕更新;如果开启,则布尔值为true

Set WordApp = CreateObject("word.application") '在excel中创建word对象,方便在excel中控制word文档

If j <= 5 Then

'不测绝缘类通用模块

Set WordDoc = WordApp.Documents.Open(number(j))

WordApp.Visible = False

WordApp.Selection.Find.ClearFormatting

WordApp.Selection.Find.Replacement.ClearFormatting

With WordApp.Selection.Find

.Text = "#X机某设备电机XXXX"

.Replacement.Text = Sheets("数据").Cells(i, k)

.Forward = True

.Wrap = wdFindContinue

End With

WordApp.Selection.Find.Execute Replace:=wdReplaceAll

ElseIf 5 < j <= 9 Then

'测绝缘类通用模块

Set WordDoc = WordApp.Documents.Open(number(j))

WordApp.Visible = False

WordApp.Selection.Find.ClearFormatting

WordApp.Selection.Find.Replacement.ClearFormatting

With WordApp.Selection.Find

.Text = "#X机某设备电机XXXX"

.Replacement.Text = Sheets("数据").Cells(i, k)

.Forward = True

.Wrap = wdFindContinue

End With

WordApp.Selection.Find.Execute Replace:=wdReplaceAll

WordApp.Selection.Find.ClearFormatting

WordApp.Selection.Find.Replacement.ClearFormatting

With WordApp.Selection.Find

.Text = "#X机某设备电机"

.Replacement.Text = Sheets("数据").Cells(i, k + 1)

.Forward = True

.Wrap = wdFindContinue

End With

WordApp.Selection.Find.Execute Replace:=wdReplaceAll

End If

'电气操作票生成存储位置

WordDoc.SaveAs "D:\电气操作票系统\电气操作票生成\" & Sheets("数据").Cells(i, k - 1) & content(j)

WordDoc.Close 'Word文件关闭

WordApp.Quit 'Word程序退出

Set WordDoc = Nothing '取消对象变量与实际对象的关联

Set WordApp = Nothing

Application.DisplayAlerts = False

Application.ScreenUpdating = True

MsgBox "电气操作票已生成,请在电气票生成文件夹中查找!", vbOKOnly, "" '消息提示

End Sub

4 结束语

Excel VBA的通用模块化编程方法,很好地解决了电气操作票大量重复的人工查找替换操作。通过简单的点击事件,加上输入开关转换状态序号及设备的行号,能够快速准确地生成所要的电气操作票。该电气操作票自动生成系统已经在实际工作中试运过一段时间,从各方面测试情况来看,系统运行稳定,各岗位人员均反馈操作简单,交互界面友好,能够很快掌握程序化操作流程。

参考文献

[1] 陈倩怡. VBA实现账务统一管理.电脑编程技巧与维护, 2021, (5):111-130+125

[2] 时坤. Excel VBA经典代码应用大全. 北京大学出版社, 2019.

[3] 国能黄金埠发电有限公司. Q/GN-HJB 101.001-2020, 国能黄金埠发电有限公司企业标准,2020

作者简介:余志荣、1992、男、大学本科、助理工程师、主要研究方向:热能与动力工程。

E-mail981755394@qq.com