劉慶杰,蔣奉君,劉 輝,魏光瑜
(1.成都飛機(jī)工業(yè)(集團(tuán))有限責(zé)任公司,四川 成都 610092;2.西南交通大學(xué),四川 成都 611756;3.國家知識(shí)產(chǎn)權(quán)局專利局專利審查協(xié)作四川中心,四川 成都 610200)
VBA(Visual Basic for Application)是Visual Basic的一種宏語言,具有比較完整的程序設(shè)計(jì)語言,并提供了面向?qū)ο蟮某绦蛟O(shè)計(jì)方法[1],可跨越多個(gè)應(yīng)用軟件,且具有控制應(yīng)用軟件的能力,可直接應(yīng)用于Office系列軟件。
根據(jù)國家保密規(guī)定,凡是國家秘密載體,包括已經(jīng)定稿或未定稿的文件和電子文檔,都應(yīng)當(dāng)按要求標(biāo)明密級(jí)和保密期限。公司要求所有電子文檔均應(yīng)在首頁固定位置按照特定字號(hào)與字體標(biāo)定密級(jí),包括“秘密★10年”、“內(nèi)部”、“公開”等。電子文檔創(chuàng)建人為標(biāo)定密級(jí)的第一責(zé)任人,標(biāo)定密級(jí)的常規(guī)操作為:打開文檔、插入文本框、輸入密級(jí)文字、調(diào)整字號(hào)、調(diào)整字體、調(diào)整文本框位置、關(guān)閉文檔。創(chuàng)建的文檔數(shù)量較多時(shí),標(biāo)定密級(jí)的操作重復(fù)且繁瑣。
為了減少人工的重復(fù)性操作,基于VBA設(shè)計(jì)了電子文檔標(biāo)定密級(jí)軟件,將標(biāo)定密級(jí)功能入口集成于電腦鼠標(biāo)的右鍵菜單欄中,可不打開電子文檔進(jìn)行相關(guān)調(diào)整工作,僅需選擇需標(biāo)定密級(jí)的電子文檔和選擇需確定的密級(jí),可以方便地為一項(xiàng)或多項(xiàng)電子文檔同時(shí)進(jìn)行密級(jí)標(biāo)定,自動(dòng)在電子文檔首頁的指定位置插入文本框、輸入指定字號(hào)、字體的密級(jí)文字字樣。
標(biāo)定密級(jí)軟件按照模塊化設(shè)計(jì)[2],包括程序入口調(diào)用、選擇電子文檔、選擇密級(jí)標(biāo)識(shí)以及公開、內(nèi)部等6個(gè)標(biāo)識(shí)密級(jí)子程序,軟件框架見圖1。
圖1 標(biāo)定密級(jí)軟件框架
程序入口子程序?yàn)镈OS命令,主要是修改注冊(cè)及調(diào)用VBA宏程序;選擇電子文檔子程序?qū)崿F(xiàn)文件選擇并獲取文件路徑;選擇密級(jí)標(biāo)識(shí)子程序?qū)崿F(xiàn)調(diào)用相應(yīng)密級(jí)子程序,密級(jí)標(biāo)識(shí)子程序?qū)崿F(xiàn)后臺(tái)標(biāo)定密級(jí)。
基于VBA自帶窗體模塊,設(shè)計(jì)密級(jí)選擇窗口[3],設(shè)置“公開”、“內(nèi)部”、“秘密”、“機(jī)密”、“普通商秘”、“核心商秘”等共6個(gè)密級(jí)標(biāo)識(shí)選項(xiàng),用不同顏色進(jìn)行區(qū)分。另設(shè)置“繼續(xù)”按扭,實(shí)現(xiàn)對(duì)不同的文件進(jìn)行標(biāo)定密級(jí)。設(shè)置“退出”按扭,退出程序。密級(jí)選擇界面如圖2所示。
圖2 密級(jí)選擇窗口
源代碼如下:
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:個(gè)人資料文檔標(biāo)定密級(jí) mep.txt"
ThisWorkbook.Close
End Sub
基于DOS命令編寫兩個(gè)BAT文件,均放置于C:Program Files目錄下。第1個(gè)修改注冊(cè)表,實(shí)現(xiàn)在鼠標(biāo)右鍵菜單欄增加“標(biāo)密管理”選項(xiàng)并鏈接調(diào)用BMS.bat,修改后的注冊(cè)表見圖3,鼠標(biāo)右鍵菜單欄選項(xiàng)見圖4,源代碼為Reg add HKEY_CLASSES_ROOTdirectoryackgroundshell標(biāo)密管理command /ve /d “C:Program FilesBMS.bat”。第2個(gè)為BMS.bat,調(diào)用主程序BMS.xlsm,代碼為@start EXCEL.EXE/e“C:ProgramFilesBMS.xlsm”。
圖3 修改后的注冊(cè)表
圖4 鼠標(biāo)右鍵菜單選項(xiàng)
文件選擇子程序主要實(shí)現(xiàn)在鼠標(biāo)選中文件后記錄該文件的路徑及所選擇的文件數(shù)量[4]。彈出的文件選擇窗口默認(rèn)為D盤,允許多項(xiàng)選擇,可任意選擇文件位置(如圖5所示)。源代碼如下:
Public ROUTE
Public Conunt_NUM
Sub FileSelect()
Set filedialogobject = Application.FileDialog(msoFileDialogFileSelect)
With filedialogobject
.Title = "請(qǐng)選擇需標(biāo)密的文件"
.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 文件選擇窗口
公開密級(jí)子程序主要實(shí)現(xiàn)按選擇的文件路徑逐個(gè)打開文件,插入文本框[5-9],位置為60#,30#,文本框大小為232#,40#。在文本框中設(shè)置文字為“公開”,字體為黑體,字號(hào)為16磅。完成所有選擇文件密級(jí)標(biāo)識(shí)后,提示“已將所選文件標(biāo)密為‘公開’”。
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 “已將所選文件標(biāo)密為“公開””
End If
On Error Resume Next
Kill “F:個(gè)人資料文檔標(biāo)定密級(jí) mep.txt”
End Sub
其它密級(jí)子程序整體與公開密級(jí)子程序相同,不同之處在于文本框中輸入密級(jí)標(biāo)識(shí)的文字及完成標(biāo)定密級(jí)后的提示框文字,源代碼如下:
With TXTBOX1
.TextFrame.TextRange.Text = "**"
.TextFrame.TextRange.Font.Name = "黑體"
.TextFrame.TextRange.Font.Size = "16"
.Line.Visible = msoFalse
.Fill.Visible = msoFalse
End With
MsgBox "已將所選文件標(biāo)密為“**”"
“**”位置為相應(yīng)的密級(jí)標(biāo)識(shí)。
新建100份電子文檔,存放于同一文件夾中,見圖6。序號(hào)1~50的文檔標(biāo)為分開、序號(hào)51~80標(biāo)為內(nèi)部、序號(hào)81~100標(biāo)為秘密。測試分為人工和程序兩組進(jìn)行,人工標(biāo)定密級(jí)為2人,其中1人采用插入文本框、輸入文字、調(diào)整字體及字號(hào)的方式,另外1人采用復(fù)制粘貼已經(jīng)制作好的密級(jí)標(biāo)識(shí)文本框的方式;程序標(biāo)定密級(jí)為1人,測試項(xiàng)目包括計(jì)算標(biāo)定密級(jí)的時(shí)間,統(tǒng)計(jì)標(biāo)定密級(jí)的一致性,包括字體、字號(hào)、文本框位置,并定性說明疲勞程度。
圖6 測試用的電子文檔
人工標(biāo)定密級(jí)測試過程:雙擊打開電子文檔、插入文本框、輸入相應(yīng)密級(jí)標(biāo)識(shí)文字、調(diào)整字號(hào)16磅、調(diào)整字體為黑體、保存文檔、關(guān)閉文檔,不斷重復(fù)上述操作100次。
程序標(biāo)定密級(jí)測試過程見圖7,分3次批量選擇序號(hào)1~50、51~80、81~100,以及選擇“公開”、“內(nèi)部”、“秘密”3種密級(jí)。
圖7 程序標(biāo)定密級(jí)過程
通過人工和程序?yàn)?00份電子文檔標(biāo)定不同密級(jí)的對(duì)比測試,所得結(jié)果如表1所示。
表1 測試結(jié)果
在測試過程中,人工操作明顯繁瑣,且隨著標(biāo)定密級(jí)數(shù)量的增加,操作明顯因疲勞而節(jié)奏放緩,人員A、 B密級(jí)標(biāo)識(shí)字體、字號(hào)正確,但人員A插入文本框位置不定,且標(biāo)定密級(jí)過程期間不能處理其它工作。程序測試的人員有條不紊,僅需點(diǎn)幾次鼠標(biāo)即可,且在程序自動(dòng)標(biāo)定密級(jí)時(shí),還能處理其他工作,密級(jí)標(biāo)識(shí)字體、字號(hào)、位置完全一致,見圖8。
圖8 標(biāo)識(shí)公開密級(jí)結(jié)果
為快速實(shí)現(xiàn)對(duì)單個(gè)或批量電子文檔標(biāo)定密級(jí),減少人工的重復(fù)性操作,基于VBA設(shè)計(jì)了電子文檔標(biāo)定密級(jí)軟件。該軟件采用模塊化設(shè)計(jì),主程序根據(jù)選擇的密級(jí)調(diào)用相應(yīng)子程序。程序入口集成于鼠標(biāo)右鍵菜單欄中,方便快速調(diào)用主程序。
經(jīng)測試驗(yàn)證,程序標(biāo)密速度為20s/份,遠(yuǎn)高于人工標(biāo)密的30~45s/份。程序不依賴操作系統(tǒng)且無需安裝,可直接運(yùn)行,推廣應(yīng)用性強(qiáng),可與其他標(biāo)密系統(tǒng)結(jié)合使用。后續(xù)將考慮結(jié)合公司國家秘密事項(xiàng)目錄對(duì)文檔進(jìn)行掃描,主動(dòng)識(shí)別關(guān)鍵密點(diǎn),輔助確定密級(jí)。