使用VBA

时间:2015-12-28 20:43:42

标签: vba ms-access

我在安全级别驱动的MS Access数据库中创建了一个管理窗口。当确定其安全性为1,admin或2,用户时,将向用户显示此管理员选项卡。

为了切入追逐,我已经创建了一个“切换按钮”' (并没有像我想象的那样完成工作,但是它确实可以解决这个问题 - 在我理解怪癖之前,它一直处于测试模式。

切换按钮显示"隐藏菜单"它与导航,表格,查询有关......基本上是用户可以做的一切,无意中进入VBA,设计,查询和解开任何东西。

再次点击切换按钮时,它会恢复以上所有内容。

然而,即使它有效,我也不确定是什么因素起作用,因为一个设置立即发生(功能区),然后我不会看到其他设置发生,直到我重新启动Access。

这是我的按钮代码:

Private Sub cmdToggleHide_Click()
    Select Case Me.cmdToggleHide.Caption

    Case "Show Menus"
        Call EnableSetProperty(True)
        Me.cmdToggleHide.Caption = "Hide Menus"
    Case "Hide Menus"
        Call EnableSetProperty(False)
        Me.cmdToggleHide.Caption = "Show Menus"
    End Select
End Sub

Public Function EnableSetProperty(bTrueFalse As Boolean)
On Error GoTo ThisError

'True means show all of access

If bTrueFalse = True Then
     DoCmd.ShowToolbar "Ribbon", acToolbarYes


Else
     DoCmd.ShowToolbar "Ribbon", acToolbarNo

End If

    SetProperties "StartUpShowDBWindow", dbBoolean, bTrueFalse ' Display Database Window
    SetProperties "StartUpShowStatusBar", dbBoolean, bTrueFalse 'Status Bar
    SetProperties "AllowFullMenus", dbBoolean, bTrueFalse 'Access Full Menus
    SetProperties "AllowSpecialKeys", dbBoolean, bTrueFalse 'F11, ALT F11, etc.
    SetProperties "AllowBypassKey", dbBoolean, bTrueFalse 'Shift Key Override on loading
    SetProperties "AllowShortcutMenus", dbBoolean, bTrueFalse 'Access Shortcut Menus. May be too severe
    SetProperties "AllowToolbarChanges", dbBoolean, bTrueFalse 'Prevent Changes
    SetProperties "AllowBreakIntoCode", dbBoolean, bTrueFalse 'Code Access'

Exit Function




ThisError:

MsgBox Err.Description

Exit Function

End Function



Public Function SetProperties(strPropName As String, varPropType As Variant, varPropValue As Variant) As Integer

On Error GoTo Err_SetProperties

Dim db As Database, prop As Property
Set db = CurrentDb
db.Properties(strPropName) = varPropValue
SetProperties = True

Set db = Nothing

Exit_SetProperties:

     Exit Function

Err_SetProperties:

     If Err = 3270 Then 'Property not found'

         Set prop = db.CreateProperty(strPropName, varPropType, varPropValue)
         db.Properties.Append prop
         Resume Next

     Else
         SetProperties = False
         MsgBox "Runtime Error # " & Err.Number & vbCrLf & vbLf & Err.Description
         Resume Exit_SetProperties

     End If

End Function

当我点击" Hide Menus"时发生的第一个古怪的事情。按钮(意图“设置它”或“保护它”)是顶部的带状物立即消失。我不介意这个设置是否实际采用了,但是对于其他设置来说,采取'我必须关闭数据库并重新打开它。

当我重新打开它时,现在导航疼痛被隐藏,表单无法被右键单击'访问'设计视图'并压制' Shift'没有绕过初创公司。但是,色带现在又回来了。我不认为我错过了什么。这并不是很糟糕,因为功能区上可以访问的内容非常无害。但我想知道它为什么会回来。

为了解除系统攻击,当然您必须以管理员身份登录,在这种情况下,您仍然可以访问“管理员”。标签和隐藏/显示'菜单切换按钮。由于我没有将切换按钮与表格中的值同步,因此它反映了当前状态,按钮仍然显示"隐藏"即使如果说" Show"在这一点上 - 所以没什么大不了的,我只需点击一次隐藏,按钮就会显示" Show"所以然后我点击显示,关闭Access,瞧,导航和所有设置都恢复正常。为什么我没有使用表格中的值同步按钮?因为我无法确定为什么这些设置不同步。当我尝试使用表中的复选框为不同的用户设置不同的设置时,它变得更加复杂。

太好了。这是可行的。

但是我希望它能够正常运行,以便界面布局表明它应该工作的方式。如果我必须通知用户在重新启动之前设置不会发生,那很好。但我绝对想知道带子的用途。

1 个答案:

答案 0 :(得分:0)

1)功能区

我的猜测:如果隐藏功能区会“粘”在Access会话之外,它会使Access(使用每个数据库,而不仅仅是隐藏功能区的数据库)几乎无法使用任何人不知道反咒语。想象一下所有支持电话。 :○
因此,重新启动Access时始终会显示功能区。

要始终隐藏它,您需要在表格中保存显示/隐藏状态,如果它是“隐藏”,请在从 AutoExec DoCmd.ShowToolbar "Ribbon", acToolbarNo >宏。

2)其他设置

这些设置也可以通过File -> Options -> Current Database设置。如果您在那里设置它们,Access会通知您必须关闭并重新打开数据库才能使它们生效。

所以这是正常的设计。