如何在Access 2007表单中选择性地编辑字段?

时间:2013-03-26 07:16:58

标签: ms-access-2007

是否可以让一个字段可编辑,同时在ACCESS 2007中以表格形式将所有其他字段设为只读? 我的表单上有大约40个控件,并且只能逐个读取它们会很不方便。我想让其中一个字段(一个选项组)可编辑,这样当用户选择一个选项时,整个表单就变得可编辑了

2 个答案:

答案 0 :(得分:1)

您可以使用VBA过程循环浏览表单的控件集合,并将每个控件的.Locked属性设置为True。检查每个控件的.ControlType属性,并忽略控件,如标签和命令按钮。 IOW,只为那些有意义的控件设置.Locked

答案 1 :(得分:1)

选项1

您可以创建要锁定子窗体的窗体,并将选项组放在主窗体中:

sample form

例如:

Private Sub Form_Current()
    Me.aTable_subform.Form.AllowAdditions = False
    Me.aTable_subform.Form.AllowEdits = False
    Me.aTable_subform.Form.AllowDeletions = False

End Sub

Private Sub PickOne_AfterUpdate()

    Select Case Me.PickOne
        Case 1, 3
            Me.aTable_subform.Form.AllowAdditions = True
            Me.aTable_subform.Form.AllowEdits = True
            Me.aTable_subform.Form.AllowDeletions = True

        Case 2
            Me.aTable_subform.Form.AllowAdditions = False
            Me.aTable_subform.Form.AllowEdits = True
            Me.aTable_subform.Form.AllowDeletions = False

    End Select
End Sub

进一步说明重新评论

选项2

您可以在主窗体打开时打开一个pop-uo表单。在此示例中,它将在主窗体之前显示。

主表格上的代码:

Private Sub Form_Close()
    DoCmd.Close acForm, "popupform"
End Sub

Private Sub Form_Load()
    DoCmd.OpenForm "popupform", , , , , acDialog
End Sub

pop-up form

Private Sub PickOne_BeforeUpdate(Cancel As Integer)
    Select Case Me.PickOne
        Case 1
            If MsgBox("You chose this. Continue?", vbYesNo) = vbYes Then
                Forms!mainform.AllowAdditions = True
                Forms!mainform.AllowEdits = True
                Forms!mainform.Form.AllowDeletions = True

                ''Setting the visibility leaves the form
                ''available but it is no longer a dialog form
                ''but you must remember to close it elsewhere
                ''If the form is not needed, just close it here
                Me.Visible = False
            Else
                Cancel = True
            End If
        Case 2
            ''Whatever

    End Select
End Sub

选项3

每个控件都有一个标签属性,供设计人员使用,例如,你可以添加" Admin"到需要锁定的所有控件。 Yo必须使用load事件或更晚的事件。

Private Sub Form_Load()
    For Each ctrl In Me.Controls
        ''For example:
        If ctrl.Tag = "Admin" And TheOption <> "Admin" Then
            ctrl.Locked = True
        End If
    Next
End Sub

您可以轻松拥有多个标记,一个用于管理员用户或OptionX,另一个用于其他用户或OptionY。

相关问题