以拆分形式隐藏列MS Access

时间:2017-03-07 18:57:58

标签: vba ms-access access-vba

我的主表单上有两个按钮。其中一个是让用户记录反馈,另一个是让我进入并为该反馈添加注释/状态更新。两个按钮在“分割表单”视图中打开相同的表单。我想隐藏特定列,当用户点击他们的按钮vs我自己点击管理按钮。我尝试过:两个按钮打开相同的表单,但是在打开表单之前,调用一个public sub,其中一个布尔变量为true(对于用户按钮)或false(对于我的按钮)。然后,当加载过程触发时,它会检查变量值,并尝试隐藏列或不会。这是代码:

Option Compare Database

Public booFeedback              As Boolean

Public Sub FeedBackBoolean1()
booFeedback = False
End Sub


Public Sub FeedBackBoolean2()
booFeedback = True
End Sub

然后当表单本身加载时,它会运行以下代码:

Private Sub Form_Load()

Call cmdRemoveFilter_Click
If booFeedback = False Then
    Me.colPriority.ColumnHidden = True
    Me.colWorkEffort.ColumnHidden = True
    Me.colStatus.ColumnHidden = True
    Me.colDeliveryDate.ColumnHidden = True
    Me.colStatusComments.ColumnHidden = True
Else
    Me.colPriority.ColumnHidden = False
    Me.colWorkEffort.ColumnHidden = False
    Me.colStatus.ColumnHidden = False
    Me.colDeliveryDate.ColumnHidden = False
    Me.colStatusComments.ColumnHidden = False

End If
End Sub

代码正确运行,但结果未显示(我要隐藏的列未正确隐藏)。我发现如果我进入设计模式,然后关闭并保存,下次运行时代码就能正常工作。但是,如果我单击其他按钮,则结果与上次运行时的结果相同。另外,我在管理按钮上放了伪密码,这样任何人都无法点击它。现在不太担心安全问题,将会在未来发展。

1 个答案:

答案 0 :(得分:0)

对于启动器,可以简化代码,不需要If Then Else:

Me.colPriority.ColumnHidden = Not booFeedback
Me.colWorkEffort.ColumnHidden = Not booFeedback
Me.colStatus.ColumnHidden = Not booFeedback
Me.colDeliveryDate.ColumnHidden = Not booFeedback
Me.colStatusComments.ColumnHidden = Not booFeedback

现在调试,设置断点,执行期间booFeedback的值是多少?如果不符合预期,请查看代码逻辑。马上,如果booFeedback和那两个潜艇在一般模块中,我没有看到失败的原因。

我会有一个按钮,只需打开该表单后面的表单和代码(可能会消除公共变量和子代码),这将决定用户是否具有管理员授权并显示/隐藏适当的字段。可以拥有存储Windows用户标识和权限级别的用户表。然后代码可以从系统中检索用户Windows ID并匹配到表中的记录。或者可以硬编码管理员用户ID。使用以下命令检索Windows用户ID:Environ(“USERNAME”) - 是的,请输入与此类似的内容。

booFeedback = Environ(“USERNAME”)=“adminWindowsUsername”

这是一个拆分数据库设计吗?导航窗格是否隐藏?功能键是否已禁用,因此用户无法展开窗格?是否禁用了右键快捷菜单?您(并且可能是用户)是否知道在打开数据库时覆盖这些项目设置的shift键旁路?