|
下载:
在 理解uSysRibbons用户自定义功能区数据表 中,uSysRibbons 是存储的数据库打开时 自动 加载的功能区定义,即,自定义的功能区在数据库一打开的时候就加载,且在数据库打开后,自定义功能区也不重新加载,就这么一次加载机会,没有控制的机会。这就很不爽了!那么如何控制想要加载的功能区呢?
Access 2007 以上版本提供了 Application.LoadCustomUI 加载代表自定义功能区的 XML 的方法。
那么我们要怎么做呢?
1、首先,就是要不让其自动加载,办法是不让数据库中存在 uSysRibbons 表。将 uSysRibbons 改名,本例中改为 uSysRibbonsAdmin。
操作步骤:
按 Alt+F11 键,进入 VBA 编辑器,按 Ctrl+G 打开立即窗口,执行如下命令:
- DoCmd.Rename "uSysRibbonsAdmin", acTable, "uSysRibbons"
复制代码 另外再多复制一份为 uSysRibbonsUser:
- DoCmd.CopyObject , "uSysRibbonsUser", acTable, "uSysRibbonsAdmin"
复制代码 说明:uSysRibbonsAdmin 针对 Admin 登录用户,uSysRibbonsUser 针对 User 登录用户。两个不同用户分别使用息的自定义功能区。
打开 uSysRibbonsAdmin 表。
- DoCmd.OpenTable "uSysRibbonsAdmin"
复制代码 将 RibbonName 字段为 “main” 行中的 RibbonXML 字段中的 “<ribbon startFromScratch="true">” 改为 “<ribbon startFromScratch="false">”,以示两个不同用户加载的自定义功能区的区别。
2、编写一段加载指定数据表中的存储自定义功能区的代码。
在 VBA 项目中,插入一个模块,将其命名为“modRibbon”,在该模块中插入“LoadRibbonsFromTable”函数。
- Public Function LoadRibbonsFromTable(ribbonTableName As String)
- Dim i As Integer
- Dim db As DAO.Database
- Set db = Application.CurrentDb
-
- For i = 0 To (db.TableDefs.Count - 1)
- If db.TableDefs(i).Name = ribbonTableName Then ' 匹配指定的数据表
- Dim rs As DAO.Recordset
- Set rs = CurrentDb.OpenRecordset(db.TableDefs(i).Name)
- rs.MoveFirst
-
- Do While Not rs.EOF
- Application.LoadCustomUI rs("RibbonName").Value, rs("RibbonXml").Value
- rs.MoveNext
- Loop
-
- rs.Close
- Set rs = Nothing
- End If
- Next i
-
- db.Close
- Set db = Nothing
- End Function
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|