 400-004-1014
                    400-004-1014
                建立Excel模具管理系统菜单
管理系统都有一个菜单入口,VBA是excel中二次开发的语言,在WPS中如果没有安装高级版可能没有VBA编程,在Excel中按键Alt+F11将进入编程界面,或者在工作表右键点击“查看代码”也可以进入。

步骤一、建立菜单的配置表

菜单表建立后,菜单即可按菜单,ID为不可重复的,FID代表父级菜单,为父级菜单时,类型为10,是否分组代表有横线的分组栏,执行过程地址则为程序的入口。
步骤二:建立“附件工具.xla”主入口文件。文件的建立方法是新建的文件,在VBA编程界面中保存为.xla文件即可。 
1、在左边树形中双击选择ThisWorkbook对象,建立workbook.open的函数段,代码如下: 
Private Sub Workbook_Open() 
Call mademenu 
End Sub 
2、点击菜单插入模块,模块中写入函数段如下: 
Dim menulen As Integer 
Dim menuobj() As Object 
Dim menuid() As String 
Sub mademenu() 
Dim found, foundflag As Boolean 
Dim cb, mybar, bar1, bar2, bar3 
Dim file01, file02, filename01 As String 
Dim myblank As Object 
Dim i, k, tol As Integer 
foundflag = False 
file01 = Workbooks("附加工具.xla").path & "\" & "菜单配置.xls" 
file02 = Workbooks("附加工具.xla").path & "\应用程序\" 
filename01 = "菜单配置.xls" 
For Each cb In CommandBars 
If cb.Name = "附加工具" Then 
    cb.Visible = True 
    cb.Delete 
    Exit For 
    End If 
Next cb 
If Not foundflag Then 
    Set mybar = CommandBars.Add(Name:="附加工具", Position:=msoBarTop, temporary:=True) 
    mybar.Visible = True 
    menulen = 0 
    found = False 
    Application.ScreenUpdating = False 
    If Not checkopen("菜单配置.xls") Then Workbooks.Open file01, ReadOnly:=True 
    Application.Calculation = xlCalculationManual  
'    Workbooks(filename01).IsAddin = True//隐藏方式打开 
    Workbooks(filename01).Activate 
    Workbooks(filename01).Sheets("菜单表").Activate 
    k = Workbooks(filename01).Sheets("菜单表").Cells(65536, "A").End(xlUp).Row 
    ReDim menuobj(k) 
    ReDim menuid(k) 
    k = 4 
    Do While Workbooks(filename01).Sheets("菜单表").Cells(k, "A") <> "" 
        If Workbooks(filename01).Sheets("菜单表").Cells(k, "A") = Workbooks(filename01).Sheets("菜单表").Cells(k, "B") Then 
        menulen = menulen + 1 
        Set menuobj(menulen) = mybar.Controls.Add(Type:=msoControlPopup, temporary:=True) 
            menuobj(menulen).Caption = "&" & asctocol(menuobj(menulen).Index) & " " & Workbooks(filename01).Sheets("菜单表").Cells(k, "C") 
            menuobj(menulen).BeginGroup = IIf(UCase(Workbooks(filename01).Sheets("菜单表").Cells(k, "E")) = "TRUE", True, False) 
            menuobj(menulen).Enabled = IIf(UCase(Workbooks(filename01).Sheets("菜单表").Cells(k, "F")) = "TRUE", True, False) 
            menuid(menulen) = "A" & Workbooks(filename01).Sheets("菜单表").Cells(k, "A") 
            Call addmenu(file02, Workbooks(filename01).Sheets("菜单表").Cells(k, "A"), k) 
        End If 
        k = k + 1 
    Loop 
    Application.ScreenUpdating = True 
    Application.Calculation = xlCalculationAutomatic 
    Workbooks("菜单配置.xls").Close False 
Application.ScreenUpdating = True 
End If 
End Sub 
3、建立递归子函数 
Sub addmenu(file02, ByVal fid As String, ByVal k1 As Integer) 
Dim i As Integer 
Dim found As Boolean 
Dim findobB As Object 
Set findobB = Workbooks("菜单配置.xls").Sheets("菜单表").Columns("B").Find(fid, after:=Workbooks("菜单配置.xls").Sheets("菜单表").Cells(k1 - 1, "B"), lookat:=xlWhole, LookIn:=xlValues) 
Do While Not findobB Is Nothing 
    k1 = findobB.Row 
    If Workbooks("菜单配置.xls").Sheets("菜单表").Cells(k1, "A") <> Workbooks("菜单配置.xls").Sheets("菜单表").Cells(k1, "B") Then 
        found = False 
        For i = menulen To 1 Step -1 
            If menuid(i) = "A" & Workbooks("菜单配置.xls").Sheets("菜单表").Cells(k1, "B") Then 
                found = True 
                menulen = menulen + 1 
                Set menuobj(menulen) = menuobj(i).Controls.Add(Type:=Workbooks("菜单配置.xls").Sheets("菜单表").Cells(k1, "D"), temporary:=True) 
                menuobj(menulen).Caption = "&" & asctocol(menuobj(menulen).Index) & " " & Workbooks("菜单配置.xls").Sheets("菜单表").Cells(k1, "C") 
                menuobj(menulen).BeginGroup = IIf(UCase(Workbooks("菜单配置.xls").Sheets("菜单表").Cells(k1, "E")) = "TRUE", True, False) 
                menuobj(menulen).Enabled = IIf(UCase(Workbooks("菜单配置.xls").Sheets("菜单表").Cells(k1, "F")) = "TRUE", True, False) 
                menuobj(menulen).OnAction = IIf(Workbooks("菜单配置.xls").Sheets("菜单表").Cells(k1, "G") <> "", file02 & Workbooks("菜单配置.xls").Sheets("菜单表").Cells(k1, "G"), "") 
                menuid(menulen) = "A" & Workbooks("菜单配置.xls").Sheets("菜单表").Cells(k1, "A") 
                Exit For 
            End If 
        Next i 
        If Workbooks("菜单配置.xls").Sheets("菜单表").Cells(k1, "D") = "10" Then 
            Call addmenu(file02, Workbooks("菜单配置.xls").Sheets("菜单表").Cells(k1, "A"), k1) 
        End If 
    End If 
    Set findobB = Workbooks("菜单配置.xls").Sheets("菜单表").Columns("B").Find(fid, after:=Workbooks("菜单配置.xls").Sheets("菜单表").Cells(k1, "B"), lookat:=xlWhole, LookIn:=xlValues) 
    If findobB.Row <= k1 Then Exit Do 
Loop 
End Sub 
总结:本章节是建立菜单,后续的模具项目管理,模具BOM管理、以及报工管理将都采用该入口进行点击。
作者:江工
QQ:53757591
 返回
返回