□吳學政上海阿爾斯通交通設備有限公司 上海 200245
基于Excel2007 VBA的圖片工藝文件程序
□吳學政
上海阿爾斯通交通設備有限公司 上海 200245
隨著ExcelVBA技術(shù)應用的日益普及,尤其是利用Excel作為數(shù)據(jù)庫的便利,使得VBA已經(jīng)深入到日常生活的各個領(lǐng)域。在松江有軌電車項目制造過程中,受到國外軌道交通圖片工藝文件的啟發(fā),設計了一款基于ExcelVBA環(huán)境的圖片工藝文件管理系統(tǒng),可實現(xiàn)對工藝文件的編制、管理和查看等功能,做到圖文并茂,一目了然。
在工業(yè)化生產(chǎn)過程中,工藝文件是生產(chǎn)過程中不可缺少的一個重要環(huán)節(jié)。傳統(tǒng)的工藝文件模板單調(diào),缺少有效直觀的圖片,特別是在當今三維制圖技術(shù)日益普及的時代,已遠遠落后時代的發(fā)展。在與法國阿爾斯通交通設備有限公司合作過程中,發(fā)現(xiàn)其工藝文件圖文并茂,簡單易懂,使用起來非常方便。受到其啟發(fā),萌發(fā)了利用Excel VBA設計圖片工藝文件的想法,重點是要充分考慮程序的可操作性及維護性,為工業(yè)化生產(chǎn)提供一種實用的工藝文件管理模式。
本程序在配備Office 2007以上版本的計算機均可實用,在Excel環(huán)境下,利用VBA二次編寫程序,只要工藝師把工藝文件的基本信息和工藝步驟編寫出來,并把圖片和步驟一一對應起來,即可通過軟件實現(xiàn)圖片式工藝文件,從而提高工作效率。
Excel是Microsoft Office家族成員,它不僅提供了強大的計算功能和表格功能,還提供宏語言Visual Basic for Application(VBA)。本程序編制是利用Excel內(nèi)嵌的編程語言,將人們熟悉的Office產(chǎn)品界面、操作習慣,通過編程來實現(xiàn)軟件的可視化,從而發(fā)揮其更強大的功能。
1.1 VBA語言的特點
(1)Excel本身功能強大,sheet頁面可直接作為數(shù)據(jù)庫,調(diào)用數(shù)據(jù)非常方便,且編寫出來的程序功能多樣,占用內(nèi)存非常小。
(2)無需考慮運行環(huán)境,因為當今大家使用Office是普遍應用的軟件。
(3)Excel界面簡單,為大家熟悉,便于使用。
(4)當出現(xiàn)錯誤,退出重新打開即可。
1.2 支持平臺及開發(fā)工具
本程序所用的編程語言是Excel VBA,運行環(huán)境為Windows XP,只要安裝Microsoft Office2007即可。
1.3 對設計軟件的要求
(1)操作簡單,界面友好,完全控件式頁面布局,使文件管理工作更簡單。
(2)即時可見,對文件內(nèi)容的修改,即刻在軟件對應部分顯示出來,達到即時見效的功能。
(3)功能完善,功能可根據(jù)自己的需求進行添加,能實現(xiàn)對工藝文件目錄和文件管理,并可打印出紙質(zhì)文件使用和存檔。
首先是宏的設置,然后填寫工藝文件的信息和編制工藝步驟。
2.1 宏的設置
(1)打開Excel點擊左上角按鈕,點擊Excel選項,如圖1所示。
(2)在功能區(qū)顯示“開發(fā)工具”選項卡上勾選,如圖2所示。
(3)打開“開發(fā)工具”中的“宏安全性”,選擇圖3所示功能。
2.2 工藝文件信息
工藝文件應具有工藝文件編號、版本、名稱等信息,具體根據(jù)各企業(yè)自定,這些內(nèi)容工藝人員應填寫完整。
工藝文件編號和樣板可根據(jù)JB/Z187.2工藝文件完整性[1]和JB/Z187.3工藝規(guī)程格式[2]來編寫,也可根據(jù)企業(yè)自己標準來定。
圖1 點擊Excel選項
圖2 勾選開發(fā)工具選項
圖3 宏設置
工藝文件的編號應能反映出組和類的信息,表1是針對軌道交通車輛工藝文件的分類表,僅供參考。
2.3 工藝文件步驟
工藝文件信息填寫完整后,應編制工藝步驟,步驟編寫完成后,即可通過軟件調(diào)用該工藝文件。
3.1 按鈕設置
打開需要添加按鈕的頁面,點擊“開發(fā)工具”→點擊“插入”→選擇按鈕命令,如圖4所示。
按鈕名稱的修改:雙擊出現(xiàn)的按鈕,出現(xiàn)VB界面,更改按鈕Caption內(nèi)容,改成自己需要的按鈕名稱,如圖5所示。
表1 工藝文件分類表
圖4 添加按鈕
圖5 按鈕名稱修改
3.2 封面設計
封面設計應變化多姿,盡量采用圖片和按鈕來設計,確保設計出來的封面豐富多彩,封面如圖6所示。
圖6 工藝文件封面
封面設計好后,應確保Excel工作簿打開后進入該頁面,其代碼如下[3]:
Private Sub Workbook_Open()
Sheets("封面").Select
End Sub
3.3 工藝文件編號
(1)點擊封面進入按鈕,進入“組裝文件編號”頁面,如圖7所示。代碼為:
Private Sub CommandButton10_Click()
Sheets("組裝文件編號").Select
End Sub
點擊第二列工藝文件編號,再點擊打開文件按鈕,即可進入“組裝卡片”頁面。
(2)點擊第二列文件編號后,該文件的信息在該頁面上顯示,它是用于在“組裝過程”頁面搜尋符合條件的工藝文件內(nèi)容。代碼為[4]:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dimk
IfTarget.Column>5 500 Then
Exit Sub
ElseIfTarget.Column=2 Then
k=14
Target.CopyCells(k,14)
Sheets("組裝文件編號").Cells(15,14)=Target.Row'把工藝文件編號輸入到單元格
圖7 工藝文件編號
End If
Dimi,d,B,C
d=Sheets("組裝文件編號").Cells(15,14)'根據(jù)工藝文件編號查詢其他內(nèi)容
For i=1 To200
Ifi=d Then
B=Sheets("組裝文件編號").Cells(i,3)
C=Sheets("組裝文件編號").Cells(i,7)
End If
Next
Sheets("組裝文件編號").Cells(16,14)=B'版本
Sheets("組裝文件編號").Cells(17,14)=C'頁數(shù)
End Sub
該代碼運行后,文件編號、所在行、版本、頁碼等信息會在頁面第14列顯示,如圖8所示。
圖8 工藝文件信息圖9 傳送到“組裝卡片”頁面上工藝文件的信息
(3)點擊“打開文件”按鈕后,進入“組裝卡片”頁面。
Private Sub CommandButton1_Click()
Sheets("組裝卡片").Select
Sheets("組裝卡片").Cells(1,30)=Sheets("組裝文件編號"). Cells(14,14)'文件編號
Sheets("組裝卡片").Cells(2,30)=Sheets("組裝文件編號"). Cells(16,14)'版本
Sheets("組裝卡片").Cells(3,30)=Sheets("組裝文件編號"). Cells(17,14)'頁數(shù)
End Sub
代碼運行后,文件編號、版本、頁碼等信息傳送到“組裝卡片”的第30列,如圖9所示。
圖8 工藝文件信息圖9 傳送到“組裝卡片”頁面上工藝文件的信息
3.4 組裝過程
“組裝過程”頁面作為一個數(shù)據(jù)庫,VBA可直接從中調(diào)用數(shù)據(jù),用于存放工藝文件的步驟,如圖10所示。
圖10 工藝文件步驟
內(nèi)容分為:①零件信息,包括:A列為序號,序號總數(shù)和頁碼相等;B列為零件在裝配圖中序號;C列為零件物料號;D列為零件的數(shù)量;E列為零件名稱;F列為零件的材料;G列為零件的圖號;H列為零件版本。②裝配圖信息,包括:R列為裝配圖物料號:XXXX;S列為裝配圖名稱:XXXX;T列為裝配圖圖號:XXXX;U列為裝配圖版本:XXXX。③工藝文件信息,包括:I列為工藝文件頁數(shù);J列為工藝文件編號;K列為工藝文件版本;L列為工步號,用數(shù)字表示;N列為圖1,零件的遠圖;O列為圖2,零件的近圖;P列為圖3,零件圖紙尺寸截圖;Q列為工序內(nèi)容,該工序操作內(nèi)容。
圖片放在以工藝文件編號的文件夾里,以上信息需要工藝人員編寫,同時把相應的圖片放在相應的文件夾內(nèi)。步驟編制完后,在“組裝卡片”頁面即可查看工藝文件。
3.5 組裝卡片
點擊3.3打開文件按鈕后進入“組裝卡片”頁面,如圖11所示。
組裝卡片頁面介紹:1區(qū)為裝配圖紙信息,如圖12所示。2區(qū)為工藝文件信息、操作按鈕、頁碼、裝配圖版本和查看序號輸入等信息,如圖13所示。3區(qū)為工步號和工序內(nèi)容,如圖14所示。4區(qū)為零件信息,如圖15所示。5區(qū)為圖片顯示,3個圖片分別為:image1控件、image2控件、image3控件,如圖16所示。
圖11 組裝卡片頁面
圖12 裝配圖信息
圖13 工藝文件等信息
圖14 工步號和工序內(nèi)容信息
圖15 零件信息
按鈕使用介紹。
(1)“刷新”按鈕。點擊“刷新”按鈕后,會顯示圖片9所示的工藝文件編號的工藝文件的第一頁。
其代碼為[5]:
Private Sub CommandButton1_Click()
'清空文件內(nèi)容
Sheets("組裝卡片").Range("v3")=""
Sheets("組裝卡片").Range("k23")=""
Sheets("組裝卡片").Range("l23")=""
Sheets("組裝卡片").Range("o23")=""
Sheets("組裝卡片").Range("p23")=""
Sheets("組裝卡片").Range("v23")=""
Sheets("組裝卡片").Range("t23")=""
Sheets("組裝卡片").Range("x23")=""
Sheets("組裝卡片").Range("w3")=""
Sheets("組裝卡片").Range("p3")=""
Sheets("組裝卡片").Range("p1")=""
Sheets("組裝卡片").Range("b22")=""
圖16 圖片顯示
Sheets("組裝卡片").Range("e22")=""
Sheets("組裝卡片").Range("e3")=""
Sheets("組裝卡片").Range("e1")=""
Sheets("組裝卡片").Range("j3")=""
Sheets("組裝卡片").Range("x3")=""
Sheets("組裝卡片").Cells(4,30)=1000
Sheets("組裝卡片").Cells(5,30)=2000
Sheets("組裝卡片").Cells(6,30)=3000
DimA,B,C,d,i
A=Sheets("組裝卡片").Cells(4,30)'設置第image1控件第1張圖片
B=Sheets("組裝卡片").Cells(5,30)'設置第image2控件第1張圖片
C=Sheets("組裝卡片").Cells(6,30)'設置第image3控件第1張圖片
d=Sheets("組裝卡片").Cells(1,30)'提取工藝文件編號
'打開圖片
Image1.Picture=LoadPicture("d:有軌電車車制作過程圖片" &d&""&A&".bmp")
Image2.Picture=LoadPicture("d:有軌電車車制作過程圖片" &d&""&B&".bmp")
Image3.Picture=LoadPicture("d:有軌電車車制作過程圖片" &d&""&C&".bmp")
For i=2 To5000
'按工藝文件編號和版本號調(diào)用數(shù)據(jù)
If Sheets("組裝過程").Cells(i,1)=1 And Sheets("組裝過程"). Cells(i,10)=Sheets("組裝卡片").Cells(1,30)
And Sheets("組裝過程").Cells(i,11)=Sheets("組裝卡片"). Cells(2,30)Then
Sheets("組裝卡片").Range("v3")=Sheets("組裝過程").Cells(i,1)
Sheets("組裝卡片").Range("k23")=Sheets("組裝過程").Cells(i,2)
Sheets("組裝卡片").Range("l23")=Sheets("組裝過程").Cells(i,3)
Sheets("組裝卡片").Range("o23")=Sheets("組裝過程").Cells(i,4)
Sheets("組裝卡片").Range("p23")=Sheets("組裝過程").Cells(i,5)
Sheets("組裝卡片").Range("v23")=Sheets("組裝過程").Cells(i,6)
Sheets("組裝卡片").Range("t23")=Sheets("組裝過程").Cells(i,7)
Sheets("組裝卡片").Range("x23")=Sheets("組裝過程").Cells(i,8)
Sheets("組裝卡片").Range("w3")=Sheets("組裝過程").Cells(i,9)
Sheets("組裝卡片").Range("p3")=Sheets("組裝過程").Cells(i,11)
Sheets("組裝卡片").Range("p1")=Sheets("組裝過程").Cells(i,10)
Sheets("組裝卡片").Range("b22")=Sheets("組裝過程").Cells(i,12)
Sheets("組裝卡片").Range("e22")=Sheets("組裝過程").Cells(i,17)
Sheets("組裝卡片").Range("e3")=Sheets("組裝過程").Cells(i,18)
Sheets("組裝卡片").Range("e1")=Sheets("組裝過程").Cells(i,19)
Sheets("組裝卡片").Range("j3")=Sheets("組裝過程").Cells(i,20)
Sheets("組裝卡片").Range("x3")=Sheets("組裝過程").Cells(i,21)
e=Sheets("組裝過程").Cells(i,1)
End If
Next
Sheets("組裝卡片").Cells(7,30)=e
End Sub
(2)“上一頁”按鈕,其代碼為:
Private Sub CommandButton2_Click()
DimA,B,C,d,e,i
A=Sheets("組裝卡片").Cells(7,30)
IfA=1 Then MsgBox"已到第一步":Exit Sub'A=1提示到第一步
A=A-1'A遞減1
For i=2 To5000
'按工藝文件編號、圖片編號和版本號調(diào)用數(shù)據(jù)
If Sheets("組裝過程").Cells(i,1)=A And Sheets("組裝過程"). Cells(i,10)=Sheets("組裝卡片").Cells(1,30)And Sheets("組裝過程").Cells(i,11)=Sheets("組裝卡片").Cells(2,30)Then
Sheets("組裝卡片").Range("v3")=Sheets("組裝過程").Cells(i,1)
Sheets("組裝卡片").Range("k23")=Sheets("組裝過程").Cells(i,2)
Sheets("組裝卡片").Range("l23")=Sheets("組裝過程").Cells(i,3)
Sheets("組裝卡片").Range("o23")=Sheets("組裝過程").Cells(i,4)
Sheets("組裝卡片").Range("p23")=Sheets("組裝過程").Cells(i,5)
Sheets("組裝卡片").Range("v23")=Sheets("組裝過程").Cells(i,6)
Sheets("組裝卡片").Range("t23")=Sheets("組裝過程").Cells(i,7)
Sheets("組裝卡片").Range("x23")=Sheets("組裝過程").Cells(i,8)
Sheets("組裝卡片").Range("w3")=Sheets("組裝過程").Cells(i,9)
Sheets("組裝卡片").Range("p3")=Sheets("組裝過程").Cells(i,11)
Sheets("組裝卡片").Range("p1")=Sheets("組裝過程").Cells(i,10)
Sheets("組裝卡片").Range("b22")=Sheets("組裝過程").Cells(i,12)
Sheets("組裝卡片").Range("e22")=Sheets("組裝過程").Cells(i,17)
Sheets("組裝卡片").Range("e3")=Sheets("組裝過程").Cells(i,18)
Sheets("組裝卡片").Range("e1")=Sheets("組裝過程").Cells(i,19)
Sheets("組裝卡片").Range("j3")=Sheets("組裝過程").Cells(i,20)
Sheets("組裝卡片").Range("x3")=Sheets("組裝過程").Cells(i,21)
B=Sheets("組裝過程").Cells(i,14)
C=Sheets("組裝過程").Cells(i,15)
d=Sheets("組裝過程").Cells(i,16)
End If
Next
e=Sheets("組裝卡片").Cells(1,30)
Image1.Picture=LoadPicture("d:有軌電車車制作過程圖片" &e&""&B&".bmp")
Image2.Picture=LoadPicture("d:有軌電車車制作過程圖片" &e&""&C&".bmp")
Image3.Picture=LoadPicture("d:有軌電車車制作過程圖片" &e&""&d&".bmp")
Sheets("組裝卡片").Cells(7,30)=A
Sheets("組裝卡片").Cells(4,30)=B
Sheets("組裝卡片").Cells(5,30)=C
Sheets("組裝卡片").Cells(6,30)=d
End Sub
(3)“下一頁”按鈕,其代碼為:
Private Sub CommandButton3_Click()
DimA,B,C,d,e,i
A=Sheets("組裝卡片").Cells(7,30)
IfA=Sheets("組裝卡片").Cells(3,30)Then MsgBox"已到最后一步":Exit Sub'到文件頁碼即為最后一步。
A=A+1'A遞增1
For i=2 To5000
If Sheets("組裝過程").Cells(i,1)=A And Sheets("組裝過程"). Cells(i,10)=Sheets("組裝卡片").Cells(1,30)And Sheets("組裝過程").Cells(i,11)=Sheets("組裝卡片").Cells(2,30)Then
Sheets("組裝卡片").Range("v3")=Sheets("組裝過程").Cells(i,1)
Sheets("組裝卡片").Range("k23")=Sheets("組裝過程").Cells(i,2)
Sheets("組裝卡片").Range("l23")=Sheets("組裝過程").Cells(i,3)
Sheets("組裝卡片").Range("o23")=Sheets("組裝過程").Cells(i,4)
Sheets("組裝卡片").Range("p23")=Sheets("組裝過程").Cells(i,5)
Sheets("組裝卡片").Range("v23")=Sheets("組裝過程").Cells(i,6)
Sheets("組裝卡片").Range("t23")=Sheets("組裝過程").Cells(i,7)
Sheets("組裝卡片").Range("x23")=Sheets("組裝過程").Cells(i,8)
Sheets("組裝卡片").Range("w3")=Sheets("組裝過程").Cells(i,9)
Sheets("組裝卡片").Range("p3")=Sheets("組裝過程").Cells(i,11)
Sheets("組裝卡片").Range("p1")=Sheets("組裝過程").Cells(i,10)
Sheets("組裝卡片").Range("b22")=Sheets("組裝過程").Cells(i,12)
Sheets("組裝卡片").Range("e22")=Sheets("組裝過程").Cells(i,17)
Sheets("組裝卡片").Range("e3")=Sheets("組裝過程").Cells(i,18)
Sheets("組裝卡片").Range("e1")=Sheets("組裝過程").Cells(i,19)
Sheets("組裝卡片").Range("j3")=Sheets("組裝過程").Cells(i,20)
Sheets("組裝卡片").Range("x3")=Sheets("組裝過程").Cells(i,21)
B=Sheets("組裝過程").Cells(i,14)
C=Sheets("組裝過程").Cells(i,15)
d=Sheets("組裝過程").Cells(i,16)
End If
Next
e=Sheets("組裝卡片").Cells(1,30)
Image1.Picture=LoadPicture("d:有軌電車車制作過程圖片" &e&""&B&".bmp")
Image2.Picture=LoadPicture("d:有軌電車車制作過程圖片" &e&""&C&".bmp")
Image3.Picture=LoadPicture("d:有軌電車車制作過程圖片" &e&""&d&".bmp")
Sheets("組裝卡片").Cells(7,30)=A
Sheets("組裝卡片").Cells(4,30)=B
Sheets("組裝卡片").Cells(5,30)=C
Sheets("組裝卡片").Cells(6,30)=d
End Sub
Private Sub CommandButton4_Click()
End Sub
3.6 工藝文件內(nèi)容修改
當發(fā)生內(nèi)容修改時,可直接在“組裝過程”頁面對步驟進行修改,對應的圖片也應作相應的改動。
該程序?qū)崿F(xiàn)了以人為本的思想,用最簡單的軟件實現(xiàn)所需的功能,操作頁面簡單,各區(qū)域及功能一目了然,無需任何培訓都會使用。同時對程序進行了反復試驗,確保了在使用時不會出現(xiàn)任何差錯。
本程序的編寫,希望能起到一個拋磚引玉的作用,得到廣大工藝人員和VBA愛好者的關(guān)注,共同來把工藝文件設計得更加完善和至美。
[1]JB/T9165.1-1998工藝文件完整性[S].
[2] JB/T9165.2-1998工藝規(guī)程格式[S].
[3]John Green,Stephen Bullen,Rob Bovey,et al.Excel Home 譯.Excel2007 VBA參考大全[M].北京:人民郵電出版社,2009.
[4]張強,劉飚.Excel2007與VBA編程從入門到精通[M].北京:電子工業(yè)出版社,2008.
[5]鐘聲,李遠詳,鄭開敏.Excel2007 VBA入門與提高實例大全[M].北京:電腦報電子音像出版社,2009.
Along with the growing popularity of technical application of Excel VBA,especially the convenience in use of Excel database,VBA has got down to all areas of daily life.Inspired by illustrated technological documents of foreign rail during the manufacturing process of Songjiang trolley car project,we designed a management system for image technological documents based on Excel VBA environment that could realize the functions to establish,manage,check and viewthe process documentation,all texts and illustrations are clear at a glance.
ExcelVBA;圖片工藝文件;設計
ExcelVBA;Illustrated TechnologicalDocuments;Design
TP317
B
1672-0555(2015)04-018-07
2015年8月
吳學政(1966-),男,本科,高級工程師,主要從事軌道交通車輛車體結(jié)構(gòu)的設計