劉慶杰,蔣奉君,劉 輝,魏光瑜
(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/份。程序不依賴操作系統且無需安裝,可直接運行,推廣應用性強,可與其他標密系統結合使用。后續將考慮結合公司國家秘密事項目錄對文檔進行掃描,主動識別關鍵密點,輔助確定密級。