刘庆杰,蒋奉君,刘 辉,魏光瑜
(1.成都飞机工业(集团)有限责任公司,四川 成都 610092;2.西南交通大学,四川 成都 611756;3.国家知识产权局专利局专利审查协作四川中心,四川 成都 610200)
VBA(Visual Basic for Application)是Visual Basic的一种宏语言,具有比较完整的程序设计语言,并提供了面向对象的程序设计方法[1],可跨越多个应用软件,且具有控制应用软件的能力,可直接应用于Office系列软件。
根据国家保密规定,凡是国家秘密载体,包括已经定稿或未定稿的文件和电子文档,都应当按要求标明密级和保密期限。公司要求所有电子文档均应在首页固定位置按照特定字号与字体标定密级,包括“秘密★10年”、“内部”、“公开”等。电子文档创建人为标定密级的第一责任人,标定密级的常规操作为:打开文档、插入文本框、输入密级文字、调整字号、调整字体、调整文本框位置、关闭文档。创建的文档数量较多时,标定密级的操作重复且繁琐。
为了减少人工的重复性操作,基于VBA设计了电子文档标定密级软件,将标定密级功能入口集成于电脑鼠标的右键菜单栏中,可不打开电子文档进行相关调整工作,仅需选择需标定密级的电子文档和选择需确定的密级,可以方便地为一项或多项电子文档同时进行密级标定,自动在电子文档首页的指定位置插入文本框、输入指定字号、字体的密级文字字样。
标定密级软件按照模块化设计[2],包括程序入口调用、选择电子文档、选择密级标识以及公开、内部等6个标识密级子程序,软件框架见图1。
图1 标定密级软件框架
程序入口子程序为DOS命令,主要是修改注册及调用VBA宏程序;选择电子文档子程序实现文件选择并获取文件路径;选择密级标识子程序实现调用相应密级子程序,密级标识子程序实现后台标定密级。
基于VBA自带窗体模块,设计密级选择窗口[3],设置“公开”、“内部”、“秘密”、“机密”、“普通商秘”、“核心商秘”等共6个密级标识选项,用不同颜色进行区分。另设置“继续”按扭,实现对不同的文件进行标定密级。设置“退出”按扭,退出程序。密级选择界面如图2所示。
图2 密级选择窗口
源代码如下:
Private Sub CommandButton1_Click()
Call Pulic_L.Pulic_L
End Sub
Private Sub CommandButton2_Click()
Call Internal_L.Internal_L
End Sub
Private Sub CommandButton3_Click()
Call Secret_L.Secret_L
End Sub
Private Sub CommandButton4_Click()
Call Classified_L.Classified_L
End Sub
Private Sub CommandButton5_Click()
Call GenCS_L.GenCS_L
End Sub
Private Sub CommandButton6_Click()
Call PivCS_L.PivCS_L
End Sub
Private Sub CommandButton7_Click()
Unload SelLe
Call FileSelect.FileSelect
End Sub
Private Sub CommandButton8_Click()
Application.DisplayAlerts = False
ThisWorkbook.Saved = False
On Error Resume Next
Kill "F:个人资料文档标定密级 mep.txt"
ThisWorkbook.Close
End Sub
基于DOS命令编写两个BAT文件,均放置于C:Program Files目录下。第1个修改注册表,实现在鼠标右键菜单栏增加“标密管理”选项并链接调用BMS.bat,修改后的注册表见图3,鼠标右键菜单栏选项见图4,源代码为Reg add HKEY_CLASSES_ROOTdirectoryackgroundshell标密管理command /ve /d “C:Program FilesBMS.bat”。第2个为BMS.bat,调用主程序BMS.xlsm,代码为@start EXCEL.EXE/e“C:ProgramFilesBMS.xlsm”。
图3 修改后的注册表
图4 鼠标右键菜单选项
文件选择子程序主要实现在鼠标选中文件后记录该文件的路径及所选择的文件数量[4]。弹出的文件选择窗口默认为D盘,允许多项选择,可任意选择文件位置(如图5所示)。源代码如下:
Public ROUTE
Public Conunt_NUM
Sub FileSelect()
Set filedialogobject = Application.FileDialog(msoFileDialogFileSelect)
With filedialogobject
.Title = "请选择需标密的文件"
.InitialFileName = "D:"
.AllowMultiSelect = True
End With
filedialogobject.Show
Set PATHS = filedialogobject.SelectedItems
With filedialogobject
Conunt_NUM = .SelectedItems.Count
End With
If Conunt_NUM > 0 Then
ReDim ROUTE(0 To Conunt_NUM - 1)
For I = 0 To Conunt_NUM - 1
ROUTE(I) = PATHS(I + 1)
Next
Else
MsgBox "未选取任何文件!"
End If
SelLe.Show 1
End Sub
图5 文件选择窗口
公开密级子程序主要实现按选择的文件路径逐个打开文件,插入文本框[5-9],位置为60#,30#,文本框大小为232#,40#。在文本框中设置文字为“公开”,字体为黑体,字号为16磅。完成所有选择文件密级标识后,提示“已将所选文件标密为‘公开’”。
Sub ublic_L()
If Conunt_NUM = 0 Then
MsgBox “您未选取文件!”
Exit Sub
Else
Dim FILENUM As Integer
FILENUM = Ubound(ROUTE, 1)
For j = 0 To FILENUM
If ROUTE(j) Like “*.doc*” Then
Dim oWord
Set oWord = VBA.CreateObject(“word.application”)
oWord.Visible = 0
oWord.DisplayAlerts = True
Dim oDoc As Object
Set oDoc = oWord.Documents.Open(ROUTE(j), , False)
With oDoc
Dim TXTBOX1
Set TXTBOX1 = oDoc.Shapes.AddTextbox(msoTextOrientationHorizontal, 60#, 30#, 232#, 40#)
With TXTBOX1
.TextFrame.TextRange.Text = “公开”
.TextFrame.TextRange.Font.Name = “黑体”
.TextFrame.TextRange.Font.Size = “16”
.Line.Visible = msoFalse
.Fill.Visible = msoFalse
End With
End With
On Error Resume Next
oWord.ActiveDocument.Save
oWord.ActiveDocument.Close False
oWord.Application.Quit
Set oWord = Nothing
Set oDoc = Nothing
Else
End If
Next
MsgBox “已将所选文件标密为“公开””
End If
On Error Resume Next
Kill “F:个人资料文档标定密级 mep.txt”
End Sub
其它密级子程序整体与公开密级子程序相同,不同之处在于文本框中输入密级标识的文字及完成标定密级后的提示框文字,源代码如下:
With TXTBOX1
.TextFrame.TextRange.Text = "**"
.TextFrame.TextRange.Font.Name = "黑体"
.TextFrame.TextRange.Font.Size = "16"
.Line.Visible = msoFalse
.Fill.Visible = msoFalse
End With
MsgBox "已将所选文件标密为“**”"
“**”位置为相应的密级标识。
新建100份电子文档,存放于同一文件夹中,见图6。序号1~50的文档标为分开、序号51~80标为内部、序号81~100标为秘密。测试分为人工和程序两组进行,人工标定密级为2人,其中1人采用插入文本框、输入文字、调整字体及字号的方式,另外1人采用复制粘贴已经制作好的密级标识文本框的方式;程序标定密级为1人,测试项目包括计算标定密级的时间,统计标定密级的一致性,包括字体、字号、文本框位置,并定性说明疲劳程度。
图6 测试用的电子文档
人工标定密级测试过程:双击打开电子文档、插入文本框、输入相应密级标识文字、调整字号16磅、调整字体为黑体、保存文档、关闭文档,不断重复上述操作100次。
程序标定密级测试过程见图7,分3次批量选择序号1~50、51~80、81~100,以及选择“公开”、“内部”、“秘密”3种密级。
图7 程序标定密级过程
通过人工和程序为100份电子文档标定不同密级的对比测试,所得结果如表1所示。
表1 测试结果
在测试过程中,人工操作明显繁琐,且随着标定密级数量的增加,操作明显因疲劳而节奏放缓,人员A、 B密级标识字体、字号正确,但人员A插入文本框位置不定,且标定密级过程期间不能处理其它工作。程序测试的人员有条不紊,仅需点几次鼠标即可,且在程序自动标定密级时,还能处理其他工作,密级标识字体、字号、位置完全一致,见图8。
图8 标识公开密级结果
为快速实现对单个或批量电子文档标定密级,减少人工的重复性操作,基于VBA设计了电子文档标定密级软件。该软件采用模块化设计,主程序根据选择的密级调用相应子程序。程序入口集成于鼠标右键菜单栏中,方便快速调用主程序。
经测试验证,程序标密速度为20s/份,远高于人工标密的30~45s/份。程序不依赖操作系统且无需安装,可直接运行,推广应用性强,可与其他标密系统结合使用。后续将考虑结合公司国家秘密事项目录对文档进行扫描,主动识别关键密点,辅助确定密级。