设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 7493|回复: 16
打印 上一主题 下一主题

控制加载自定义功能区

[复制链接]

点击这里给我发消息

跳转到指定楼层
1#
发表于 2017-9-25 10:17:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式



下载:
游客,如果您要查看本帖隐藏内容请回复


理解uSysRibbons用户自定义功能区数据表 中,uSysRibbons 是存储的数据库打开时 自动 加载的功能区定义,即,自定义的功能区在数据库一打开的时候就加载,且在数据库打开后,自定义功能区也不重新加载,就这么一次加载机会,没有控制的机会。这就很不爽了!那么如何控制想要加载的功能区呢?

Access 2007 以上版本提供了 Application.LoadCustomUI 加载代表自定义功能区的 XML 的方法。

那么我们要怎么做呢?

1、首先,就是要不让其自动加载,办法是不让数据库中存在 uSysRibbons 表。将 uSysRibbons 改名,本例中改为 uSysRibbonsAdmin
操作步骤:
Alt+F11 键,进入 VBA 编辑器,按 Ctrl+G 打开立即窗口,执行如下命令:
  1. DoCmd.Rename "uSysRibbonsAdmin", acTable, "uSysRibbons"
复制代码
另外再多复制一份为 uSysRibbonsUser
  1. DoCmd.CopyObject , "uSysRibbonsUser", acTable, "uSysRibbonsAdmin"
复制代码
说明uSysRibbonsAdmin 针对 Admin 登录用户,uSysRibbonsUser 针对 User 登录用户。两个不同用户分别使用息的自定义功能区。


打开 uSysRibbonsAdmin 表。
  1. DoCmd.OpenTable "uSysRibbonsAdmin"
复制代码
RibbonName 字段为 “main” 行中的 RibbonXML 字段中的 “<ribbon startFromScratch="true">” 改为 “<ribbon startFromScratch="false">”,以示两个不同用户加载的自定义功能区的区别。

2、编写一段加载指定数据表中的存储自定义功能区的代码。
在 VBA 项目中,插入一个模块,将其命名为“modRibbon”,在该模块中插入“LoadRibbonsFromTable”函数。
  1. Public Function LoadRibbonsFromTable(ribbonTableName As String)
  2.     Dim i As Integer
  3.     Dim db As DAO.Database
  4.     Set db = Application.CurrentDb
  5.       
  6.     For i = 0 To (db.TableDefs.Count - 1)
  7.         If db.TableDefs(i).Name = ribbonTableName Then ' 匹配指定的数据表
  8.           Dim rs As DAO.Recordset
  9.           Set rs = CurrentDb.OpenRecordset(db.TableDefs(i).Name)
  10.           rs.MoveFirst
  11.    
  12.           Do While Not rs.EOF
  13.                 Application.LoadCustomUI rs("RibbonName").Value, rs("RibbonXml").Value
  14.                 rs.MoveNext
  15.           Loop
  16.    
  17.           rs.Close
  18.           Set rs = Nothing
  19.        End If
  20.     Next i
  21.    
  22.     db.Close
  23.     Set db = Nothing
  24. End Function
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

本帖被以下淘专辑推荐:

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享分享 分享淘帖1 订阅订阅

点击这里给我发消息

2#
 楼主| 发表于 2017-9-25 10:21:40 | 只看该作者
3、新建自动运行宏 Autoexec,使其在打开数据库时自动执行,以对话框方式打开 frmWelcome 窗体。



4、修改 frmWelcome 代码,使其根据登录用户加载不同的自定义功能区:
  1. Private Sub cmdClose_Click()
  2.     DoCmd.Close acForm, Me.Name, acSaveNo
  3.     DoCmd.ShowToolbar "Ribbon", acToolbarYes

  4.     DoCmd.Quit
  5. End Sub

  6. Private Sub cmdLogin_Click()
  7.     If cboUser = "Admin" Then
  8.         LoadRibbonsFromTable "uSysRibbonsAdmin"
  9.         DoCmd.Close acForm, Me.Name, acSaveNo
  10.         DoCmd.ShowToolbar "Ribbon", acToolbarYes
  11.     ElseIf cboUser = "User" Then
  12.         LoadRibbonsFromTable "uSysRibbonsUser"
  13.         DoCmd.Close acForm, Me.Name, acSaveNo
  14.         DoCmd.ShowToolbar "Ribbon", acToolbarYes
  15.     End If
  16. End Sub

  17. Private Sub Form_Load()
  18.     DoCmd.ShowToolbar "Ribbon", acToolbarNo
  19.     txtPwd = "-- 输入登录密码 --"
  20. End Sub
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

点击这里给我发消息

3#
发表于 2017-9-25 10:38:15 | 只看该作者
最近朱总佳作不断!

点击这里给我发消息

4#
 楼主| 发表于 2017-9-25 11:08:25 | 只看该作者
简单自定义功能区,从生成XML->自动加载->程序控制,相对比较完整,至此,一个小系列已完成。

至于如何做得更好,敬请各位自由发挥。
5#
发表于 2017-9-25 21:47:21 | 只看该作者

谢谢分享,收藏了
6#
发表于 2017-9-26 06:28:27 | 只看该作者
小白一个,学习学习
7#
发表于 2017-9-29 11:29:03 | 只看该作者
111111111111111
8#
发表于 2017-10-28 11:38:52 | 只看该作者
拜读朱总佳作
9#
发表于 2017-12-26 13:10:33 | 只看该作者
谢谢老师分享
10#
发表于 2018-1-7 23:42:28 | 只看该作者
控制加载自定义功能区,这个好
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-1 13:31 , Processed in 0.094458 second(s), 36 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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