Office中国论坛/Access中国论坛
标题:
控制加载自定义功能区
[打印本页]
作者:
zhuyiwen
时间:
2017-9-25 10:17
标题:
控制加载自定义功能区
[attach]62045[/attach]
[attach]62047[/attach]
下载:
在
理解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
复制代码
作者:
zhuyiwen
时间:
2017-9-25 10:21
3
、新建自动运行宏 Autoexec,使其在打开数据库时自动执行,以对话框方式打开 frmWelcome 窗体。
[attach]62048[/attach]
4
、修改 frmWelcome 代码,使其根据登录用户加载不同的自定义功能区:
Private Sub cmdClose_Click()
DoCmd.Close acForm, Me.Name, acSaveNo
DoCmd.ShowToolbar "Ribbon", acToolbarYes
DoCmd.Quit
End Sub
Private Sub cmdLogin_Click()
If cboUser = "Admin" Then
LoadRibbonsFromTable "uSysRibbonsAdmin"
DoCmd.Close acForm, Me.Name, acSaveNo
DoCmd.ShowToolbar "Ribbon", acToolbarYes
ElseIf cboUser = "User" Then
LoadRibbonsFromTable "uSysRibbonsUser"
DoCmd.Close acForm, Me.Name, acSaveNo
DoCmd.ShowToolbar "Ribbon", acToolbarYes
End If
End Sub
Private Sub Form_Load()
DoCmd.ShowToolbar "Ribbon", acToolbarNo
txtPwd = "-- 输入登录密码 --"
End Sub
复制代码
作者:
tmtony
时间:
2017-9-25 10:38
最近朱总佳作不断!
作者:
zhuyiwen
时间:
2017-9-25 11:08
简单自定义功能区,从生成XML->自动加载->程序控制,相对比较完整,至此,一个小系列已完成。
至于如何做得更好,敬请各位自由发挥。
作者:
c101
时间:
2017-9-25 21:47
谢谢分享,收藏了
作者:
ardu95
时间:
2017-9-26 06:28
小白一个,学习学习
作者:
灰太郎
时间:
2017-9-29 11:29
111111111111111
作者:
fan0217
时间:
2017-10-28 11:38
拜读朱总佳作
作者:
XMX64311
时间:
2017-12-26 13:10
谢谢老师分享
作者:
wj3031
时间:
2018-1-7 23:42
控制加载自定义功能区,这个好
作者:
ynjxw
时间:
2018-1-17 14:42
see
作者:
xiaowuo2
时间:
2018-1-17 14:46
感谢分享,顶个
作者:
liguang1207
时间:
2018-5-17 02:05
感谢分享!!
作者:
sql999
时间:
2018-5-28 11:02
DDD
作者:
做梦
时间:
2018-6-30 07:46
不错,学习了,感谢分享
作者:
jiutianxingchen
时间:
2018-8-21 15:20
谢谢朱总
作者:
1828737@qq.com
时间:
2019-12-24 23:36
kankan
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/)
Powered by Discuz! X3.3