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

发表时间:2021/8/20   来源:《中国电业》2021年12期   作者:余志荣
[导读] 借助Excel VBA模块化编程,解决重复的人工查找替换工作,且能够经简单地操作实现电气操作票自动生成,避免因删除文件或修改关键词导致出错,影响操作安全性。
        余志荣
        国家能源集团黄金埠发电有限公司,江西上饶 335101
        摘要:借助Excel VBA模块化编程,解决重复的人工查找替换工作,且能够经简单地操作实现电气操作票自动生成,避免因删除文件或修改关键词导致出错,影响操作安全性。
        关键词:VBA语言;火电厂;电气操作票
1 概述
        常规电气操作票相似度较高,只需要修改关键字段即可变更。但在实际工作中,工作人员常为了简便,会直接搜索相关电气操作票,用关键字段替换后保存导致原票实效。因此,为了规避此类重复人工操作,使用Excel VBA程序设计开发自动生成功能,按照统一的模板生成不同设备的电气操作票,从而提高了工作人员的效率,且可减少电气操作票错误率。
2 项目设计
        电气操作票设备的开关转换状态共计有10种,但设备的操作主要区别可分为测绝缘和不测绝缘两类。因此,可针对两种类型分别设计通用代码模块,但主要功能都是通过创建Word对象来打开对应的模板电气操作票,查找关键字段,用Excel单元格的内容进行替换。
        在Excel文件中,集成6KV设备的关键字段数据库,设备关键字段可根据需求进行删除或者增加。在需要生成一张指定的电气操作票时,可使用命令按钮(ActiveX控件),在CommandButton1_Click()事件代码中运行CreateTickets()程序,在输入设备开关转换状态序号(0~9)及6KV设备关键字段的行号后,即可在指定路径下找到所要电气操作票。

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
投稿 打印文章 转寄朋友 留言编辑 收藏文章
  期刊推荐
1/1
转寄给朋友
朋友的昵称:
朋友的邮件地址:
您的昵称:
您的邮件地址:
邮件主题:
推荐理由:

写信给编辑
标题:
内容:
您的昵称:
您的邮件地址: