Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 6994|回复: 12

[已解决]怎么样根据登录用户的不同显示不同的菜单

[复制链接]
发表于 2012-9-20 11:59 | 显示全部楼层 |阅读模式
本帖最后由 9910343 于 2012-9-20 16:53 编辑

怎么样根据登录用户的不同显示不同的菜单,见附件,当管理员登录时显示菜单栏的全部菜单,其他人登录时只显示菜单栏的文件这个菜单,登录密码123 登录.rar (16.09 KB, 下载次数: 24)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2012-9-20 12:29 | 显示全部楼层
回复

使用道具 举报

发表于 2012-9-20 13:02 | 显示全部楼层
03的文件,在10上没办法弄!

给你个思路吧,登陆的时候,根据权限来调用不同的菜单过程就行了,很简单的!!
回复

使用道具 举报

 楼主| 发表于 2012-9-20 13:47 | 显示全部楼层
无聊的疯子 发表于 2012-9-20 13:02
03的文件,在10上没办法弄!

给你个思路吧,登陆的时候,根据权限来调用不同的菜单过程就行了,很简单的 ...

能否写个代码,谢谢
回复

使用道具 举报

发表于 2012-9-20 13:53 | 显示全部楼层
无聊的疯子 发表于 2012-9-20 13:02
03的文件,在10上没办法弄!

给你个思路吧,登陆的时候,根据权限来调用不同的菜单过程就行了,很简单的 ...

10上也是有办法的
回复

使用道具 举报

发表于 2012-9-20 14:01 | 显示全部楼层    本楼为最佳答案   
9910343 发表于 2012-9-20 13:47
能否写个代码,谢谢

登陆按钮中添加一个判断代码,
登陆名是 管理员,则执行 模块1.Set_ToolMenu,
                       否则执行 模块1.Set_ToolMenu2

  1. Private Sub CommandButton1_Click()
  2. On Error GoTo 10 '当姓名与密码不对应时,会出现错误,转到10语句处理
  3. Dim n As String
  4. Set sh = Sheets("设置")
  5. na = ComboBox1.Text: ps = TextBox1.Text '取得登录窗口中的姓名与密码
  6. If na = "" Or ps = "" Then MsgBox "未输入用户名或密码,不能登录", , "提示": Exit Sub
  7. s = WorksheetFunction.Match(na, sh.[a:a], 0) '查找用户在A列的位置
  8. n = sh.Cells(s, 2) '取出"设置"表中的权限密码,字符型
  9. If n <> ps Then GoTo 10
  10. Call 隐藏表
  11. '检查一下"设置"表的C列及右边各格中的内容,有内容的,说明可以打开内容所指定的工作表
  12. For I = 4 To 255
  13.     b = sh.Cells(s, I).Value
  14.     If b = 1 And sh.Cells(1, I) <> "" Then '单元格为1时,表示有权限打开这个表,就让它显示出来
  15.         Sheets(sh.Cells(1, I).Value).Visible = -1
  16.     End If
  17. Next
  18. '================================
  19. If na = "管理员" Then
  20.   模块1.Set_ToolMenu
  21. Else
  22.   模块1.Set_ToolMenu2
  23. End If
  24. '================================
  25. Unload UserForm1 '退出窗体
  26. Exit Sub
  27. 10:
  28. MsgBox "姓名或密码错误,不能登录", , "提示"
  29. End Sub
复制代码
在模块1中添加一个过程 Set_ToolMenu2

  1. Sub Set_ToolMenu()
  2. Dim mCaidan As Menu
  3.     MenuBars(xlWorksheet).Reset
  4.     Set mCaidan = MenuBars(xlWorksheet).Menus.Add("【数据查询系统】")
  5.     With mCaidan.MenuItems
  6.         .Add "命令一", "命令"
  7.         .Add "命令二", "命令"
  8.         .Add "-"
  9.         .Add "命令三", "命令"
  10.         .Add "命令四", "命令"
  11.     End With
  12. End Sub
  13. Sub Set_ToolMenu2()
  14. Dim mCaidan As Menu
  15.     MenuBars(xlWorksheet).Reset
  16.     Set mCaidan = MenuBars(xlWorksheet).Menus.Add("【数据查询系统】")
  17.     With mCaidan.MenuItems
  18.         .Add "命令一", "命令"
  19.         .Add "-"
  20.         .Add "命令三", "命令"
  21.     End With
  22. End Sub
  23. Sub 命令()
  24.   MsgBox "这是个示范"
  25. End Sub
复制代码
这是相对比较的简单直接的方法,也可以在 Set_ToolMenu 中设置参数,直接通过参数来判断,就可以少一个过程!
回复

使用道具 举报

发表于 2012-9-20 14:01 | 显示全部楼层
5201314 发表于 2012-9-20 13:53
10上也是有办法的

10的菜单和03的不一样,方法不能共用!!

回复

使用道具 举报

 楼主| 发表于 2012-9-20 14:49 | 显示全部楼层
无聊的疯子 发表于 2012-9-20 14:01
10的菜单和03的不一样,方法不能共用!!

还有一个问题就是原来的菜单我都要隐藏,我只需要自定义的菜单
Sub Set_ToolMenu3()
     For I = 1 To 10
        Application.CommandBars(1).Controls(I).Visible = False
    Next
End Sub
这个命令怎么加入,谢谢
回复

使用道具 举报

 楼主| 发表于 2012-9-20 16:51 | 显示全部楼层
无聊的疯子 发表于 2012-9-20 14:01
10的菜单和03的不一样,方法不能共用!!

问题已解决,谢谢
回复

使用道具 举报

发表于 2012-9-20 17:28 | 显示全部楼层
本帖最后由 5201314 于 2012-9-20 17:33 编辑
无聊的疯子 发表于 2012-9-20 14:01
10的菜单和03的不一样,方法不能共用!!

http://www.excelperfect.com/index.php/2011/09/26/changetab/
变化的选项卡——让不同的用户有不同的选项卡
你看了就明白,是可以实现的(稍加修改就能实现的)

自定义功能区代码:
  1. <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="rxIRibbonUI_onLoad">
  2.         <ribbon startFromScratch="false">
  3.                 <tabs>
  4.                         <tab id="TabChange1" label="张三的选项卡" insertBeforeMso="TabHome" getVisible="rxTab_GetVisible">
  5.                                 <group id="GrpZS" label="张三的组">
  6.                                         <button id="rxBtn1" imageMso="MsnLogo" />
  7.                                 </group>
  8.                         </tab>
  9.                         <tab id="TabChange2" label="李四的选项卡" insertBeforeMso="TabHome" getVisible="rxTab_GetVisible">
  10.                                 <group id="GrpLS" label="李四的组">
  11.                                         <button id="rxBtn2" imageMso="RefreshWebView" />
  12.                                 </group>
  13.                         </tab>
  14.                 </tabs>
  15.         </ribbon>
  16. </customUI>
复制代码
在thisworkbook代码:
  1. Private Sub Workbook_Open()
  2.     gstrUserName = InputBox("请输入用户名(张三、李四)", "输入用户名")
  3.     On Error Resume Next
  4.     grxIRibbonUI.Invalidate
  5. End Sub
复制代码
标准模块代码:
  1. Public grxIRibbonUI As IRibbonUI
  2. Public gstrUserName As String

  3. 'Callback for customUI.onLoad
  4. Sub rxIRibbonUI_onLoad(ribbon As IRibbonUI)
  5.     Set grxIRibbonUI = ribbon
  6. End Sub

  7. 'Callback for TabChange1 getVisible
  8. Sub rxTab_GetVisible(control As IRibbonControl, ByRef returnedVal)
  9.     Select Case control.ID
  10.         Case "TabChange1"
  11.             If gstrUserName = "张三" Then
  12.                 returnedVal = True
  13.             Else
  14.                 returnedVal = False
  15.             End If
  16.         Case "TabChange2"
  17.             If gstrUserName = "李四" Then
  18.                 returnedVal = True
  19.             Else
  20.                 returnedVal = False
  21.             End If
  22.     End Select
  23. End Sub
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-26 14:12 , Processed in 0.333766 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表