■ 崔璐/東方航空技術有限公司
對于多機隊運營的航空公司來說,客艙構型多樣,涉及客艙類部件的CMM 手冊數量和種類較多,傳統通過部件號在IPC 中查詢CMM 手冊章節號的步驟較為煩瑣,對網絡環境依賴度較高,效率較低。
VBA 是內嵌于Office 軟件中的一個開發模塊,提供程序自主開發,其語言基 礎 和VB(Visual Basic)相 似。VBA運行環境依賴性不強,與常用辦公軟件(Excel/Word/PowerPoint/WPS/Access 等)完美兼容,編程語言簡單易用,分享性和移植性很強,對計算機的配置要求不高,幾乎所有測試通過的程序放到別的機器上都可輕易執行(不考慮各種本地文件配置)。
本文利用字典查找法,基于Excel VBA 開發了一套通過機號、客艙件類別和區域位置信息多關鍵字匹配查詢的客艙CMM 手冊查詢系統,可提升維修人員CMM 手冊的查詢效率。
VBA 編程環境是面向對象的編程環境,例如,工作表中的單元格是其中一個對象,對單元格的輸入是一個事件,該事件可以觸發一段程序塊的運行,程序塊就是設計者需要編寫的劇本。
窗體控件是Excel 的一種用戶界面設計工具,可以很好地實現用戶與Excel 文件的交互。窗體控件可以顯示固定信息來提示用戶,如提示、警示等;也可以與用戶交互,如輸入文本框、下拉列表框選擇等;還可以給控件設置屬性,編寫對窗體反應的VBA 過程和控制事件,調用執行用戶編輯的程序塊,實現所需的功能。
考慮到界面友好性、運行環境依賴度、系統的可移植性以及開發周期,本系統基于Microsoft Excel 2016 版VBA開發環境(WPS 兼容)實現,開發了一套通過機號、客艙件類別和區域位置信息等多關鍵字匹配查詢的客艙CMM 手冊查詢系統,具有操作簡單、運行環境依賴度低、可移植程度高、開發周期短、維護方便等優點。
系統共有兩大主要功能:查詢功能和數據庫維護功能。系統界面有三個:歡迎界面、查詢系統界面和數據維護系統界面,如圖1、圖2 所示。

圖1 歡迎界面與查詢系統界面

圖2 數據維護系統界面
整個系統由35 個Sheet 組成,其中三個系統界面各為1 個Sheet,數據庫有32 個Sheet。數據庫分為查詢數據庫和資料版本數據庫兩大類,查詢數據庫有24 個,數據結構如表1 所示。

表1 查詢數據庫數據結構(以某機型座椅為例)
查詢數據庫中第5 ~6 列數據,使用Excel 內置函數,根據CMM 手冊號調用資料版本數據庫數據。資料版本數據庫分機型存放,共有8 個Sheet。
在歡迎界面點擊查詢系統按鈕可進入查詢功能模塊。查詢條件有三個:機號、客艙類別和區域。三個條件通過Excel 內置函數與數據有效性驗證功能實現三級聯動,支持部分條件默認的模糊查找。在輸入機號信息后,客艙類別列自動關聯為對應機型的下拉選擇菜單,選擇客艙類別后,區域列自動關聯為該機型對應客艙類別的客艙件所屬區域。根據不同的查詢條件輸入,查詢結果有4 種顯示情況,如表2 所示。

表2 查詢結果顯示分類
點擊查詢按鈕,在結果區域顯示查詢結果;點擊“重置查詢條件”按鈕可清空當前查詢條件;點擊“返回主界面”按鈕返回歡迎界面。
點擊后臺數據維護按鈕,正確輸入管理員密碼即可進入系統數據庫。點擊顯示數據庫,根據對話框提示選擇所需的數據庫。數據維護分為兩大類:機隊數據維護和資料版本維護,機隊數據維護主要是客艙工程師對飛機號及相應CMM 手冊編號進行維護,資料版本維護主要是資料管理人員進行CMM 手冊相關信息的更新、修改及增刪等。系統功能界面流程圖如圖3 所示。

圖3 系統功能界面流程圖
典型的數據查找算法有順序查找、折半查找、二叉樹排序查找等。這些技術是通過一系列給定值與關鍵碼的比較,查找效率依賴于過程中給定值與關鍵碼的比較次數。VBA 字典查找法基于哈希(Hash)查找原理,在存儲位置與關鍵碼之間建立一個確定的對應關系,是一種面向查找的存儲結構,查找方式不依賴比較次數,其簡要算法邏輯如圖4 所示。針對本系統多關鍵字查詢和多查詢結果顯示的功能需求,相較于典型查找方法,采用字典查找法的效率更高。

圖4 算法邏輯
本系統將存放有機號、客艙類別、區域、CMM 手冊號、手冊版本號和廠家等信息的查詢數據庫Sheet 名稱按照“機型+座椅/廚房/廁所”的規則定義,如“B737 座椅”“B777 廚房”“A330廁所”等,共24 個查詢子數據庫。
每個子數據庫可以看作一個字典,子數據庫Sheet 中對應單元格的行、列信息為數據的存儲位置,查詢條件中的“客艙類別”與數據庫Sheet 名稱相對應,且具有唯一標識性,將對應Sheet 內已有數值的單元格數據賦值給數組,完成字典創建。將機號、區域信息依次作為關鍵碼KEY,完成字典遍歷查找,確定結果信息的存儲位置。
在查詢系統界面新建文本框按鈕“查詢”,并為其指定宏模塊“數據查找”,在VBA 編輯界面新建“Sub 數據查找()”過程模塊,創建代碼完成字典創建、遍歷查找及結果可視化顯示。將查詢數據庫中所有標題通過Split語句用“|”隔開的字符串分離成數組賦予vTitle,根據輸入的查詢條件“客艙類別”sPlace 找到對應的查詢子數據庫,運用Function Dict 將該客艙類別的Sheet 中所有已用單元格的數值賦值給數組vData,并通過語句CreateObject(“Scripting.Dictionary”)完成字典創建。
通過Sheets(“查詢系統”).[單元格名稱]語句獲取輸入的查詢條件“機號”“區域”,分別賦值于sName和sArea 變量,運用邏輯判斷語句,完成字典數組遍歷獲得查詢結果,將查詢到的存儲位置對應的所有數據信息賦予vFill 結果數組。
通過With Sheets(“查詢系統”).[需寫入內容的單元格位置信息]= Application.WorksheetFunction.Transpose(vFill)語句對查詢系統所在Sheet 下的單元格寫入數據,實現在Excel 窗口下的結果可視化顯示。
當輸入錯誤或未檢索到結果時,通過MsgBox 語句實現相關提示:MsgBox“未查詢到信息,請檢查是否輸入有誤”,vbExclamation,“提示”。
系統主界面為歡迎界面,在歡迎界面點擊“查詢系統”按鈕可進入查詢功能模塊,點擊后臺數據維護按鈕,根據提示輸入正確的管理員密碼可進入數據維護系統界面。兩大功能界面均設計有返回主界面按鈕,可快速回到歡迎界面。在數據維護系統界面中設計有顯示數據庫和隱藏數據庫按鈕,管理員可根據提示,調出需要維護的1 個或多個數據庫Sheet 進行操作。數據維護系統界面設計如圖5 所示。

圖5 數據維護系統界面設計
在數據維護系統界面新建文本框按鈕“顯示數據庫”,并為其指定宏模塊shtvisible,在VBA 編輯界面新建“Sub shtvisible()”過程模塊,運用語句InputBox(“輸入提示語”)實現引導式提示輸入,根據用戶的輸入信息,找到所有匹配的Sheet 名稱,運用sht.Visible=xlSheetVisible 語句更改Sheet的顯示屬性為Visible,實現數據庫顯示。
在數據維護系統界面新建文本框按鈕“返回主界面”,并為其指定宏模塊“返回主界面”,在VBA 編輯界面新建“Sub 返回主界面()”過程模塊,運用Sheets(“歡迎界面”).Visible=xlSheetVisible 和sht.Visible=xlSheetVery-Hidden 語句更改各個子Sheet 的顯示屬性,實現返回主界面功能。
考慮到數據安全性,本系統通過VBA 代碼設置密碼實現數據源保護功能。如圖6 所示,在歡迎界面點擊“后臺數據維護”按鈕,根據提示輸入正確的管理員密碼才可進入數據維護系統界面。

圖6 數據源保護設計
Excel 中Sheet 的顯示屬性分為顯示、隱藏、深度隱藏三種,本系統采用深度隱藏屬性xlSheetVeryHidden,以防止用戶通過右鍵點擊Sheet 改變數據庫的顯示屬性,可進一步實現數據源保護。
除此之外,系統還通過語句“Sheets(“查詢系統”).Protect Password:=XXX,DrawingObjects:=True,Contents:=True,Scenarios:=True,AllowFormattingRows:=True”設 計 了界面顯示保護功能。在查詢系統界面,除查詢條件可由用戶輸入選擇外,其他單元格以密碼形式設置了自動單元格保護,以防被修改。
本文利用字典查找法,基于Excel VBA 開發了多關鍵字匹配查詢的客艙CMM 手冊查詢系統,輸入基本查詢條件后,平均查詢時長不到1s。系統具有操作簡單、運行環境依賴度低、可移植程度高、維護方便等特點,為維修人員提供了一種有力的輔助手段,大大提升了查詢客艙CMM 手冊的效率,為提高公司飛機客艙設備的維護水平提供助力。
雖然VBA 在應用過程中存在局限性,但與眾多程序設計語言相比仍有長處。本文在數據查詢處理方面提供了一種新思路。為了簡化機械繁重的數據處理工作,VBA 平臺提供了開發高效、精確數據處理工具的可能性,可以較好地提升工作效率和便捷性。