【问题标题】:Read-Only and undo properties MS Access (VBA)只读和撤消属性 MS Access (VBA)
【发布时间】:2013-02-05 13:54:40
【问题描述】:

对于像我这样的新手来说,我一直在网上寻找答案,我认为这是一个非常简单的问题.. 但是还没有找到任何答案,所以我在这里!为了简单起见,我将附上我的代码中让我有点头疼的两段代码。我打算做的是通过单击按钮从只读模式切换到允许写入状态。为此,我希望例程检查记录中的更改,如果有任何要求用户决定是保存更改还是丢弃它们。在测试这个特定按钮时,我发现了一些非常“好笑”.. 当没有引入任何更改时,它似乎运作良好。从只读状态完美切换到允许写状态。但是,在允许写入并进行更改时,如果已选择/单击“保存选项”,则尽管已实现所有其他子例程和更改,但它不会锁定内容。

与此密切相关的另一个问题是我找不到为撤消选项设置“保存点”的方法。我想找到一种“保存记录”的方法,因此当按下撤消按钮时,不会撤消自数据库首次打开(当前正在发生的情况)以来记录所遭受的所有更改,但由于按钮已按下。我尝试了 DoCmd Save 功能,但没有像我预期的那样表现(注意:最后一个“else”是我最后一次尝试解决这个问题,但同样,它没有按预期工作)

非常感谢您未来的合作,

亚历克斯

Private Sub Command28_Click()
    If Form_AODNewRecord.AllowAdditions = True Then
        Call isModified_Save

        Form_AODNewRecord.AllowAdditions = False
        Form_AODNewRecord.AllowEdits = False
        Form_AODNewRecord.AllowDeletions = False
        MsgBox "Read Only. Addition, Edits and Deletions are now locked"
        Command28.Caption = "LOCKED"
    Else
        Form_AODNewRecord.AllowAdditions = True
        Form_AODNewRecord.AllowEdits = True
        Form_AODNewRecord.AllowDeletions = True
        MsgBox "New records, edits and deletions are now allowed"
        Command28.Caption = "Lock mode OFF"
    End If

    MsgBox Form_AODNewRecord.AllowAdditions
End Sub

Sub isModified_Save()
    If Form_AODNewRecord.Dirty Then
        Dim strMsg As String, strTitle As String
        strMsg = "You have edited this record. Do you want to save the changes?"
        strTitle = "Save Record?"
        If MsgBox(strMsg, vbQuestion + vbYesNo, strTitle) = vbNo Then
            Me.Undo
        Else
            DoCmd.OpenTable "AOD Type", acViewPreview, acReadOnly
            DoCmd.Save acTable, "AOD Type"
            DoCmd.Close acTable, "AOD Type", acSaveYes

        End If
    End If

End Sub

【问题讨论】:

    标签: vba properties save record undo


    【解决方案1】:

    我认为您需要以下代码。您无法打开表单绑定的表格并影响表格,当您打开表格时,您有两个不同的实例,它们不会相互影响。

    在 Office 应用程序中运行宏的一个奇怪的副作用是它会清除撤消列表,因此我创建了一个小宏,它只显示一条消息“撤消已清除”,而这正是它的作用!

    顺便说一句,用有意义的名称重命名您的控件,例如 cmdLock,而不是 Command28,稍后您会感谢自己。

    Private Sub Command28_Click()
        If Me.AllowAdditions = True Then
            Call isModified_Save
    
            Me.AllowAdditions = False
            Me.AllowEdits = False
            Me.AllowDeletions = False
            MsgBox "Read Only. Addition, Edits and Deletions are now locked"
            Command28.Caption = "LOCKED"
        Else
            Me.AllowAdditions = True
            Me.AllowEdits = True
            Me.AllowDeletions = True
            MsgBox "New records, edits and deletions are now allowed"
            Command28.Caption = "Lock mode OFF"
        End If
    
        ''MsgBox Me.AllowAdditions
    End Sub
    
    Sub isModified_Save()
        If Me.Dirty Then
            Dim strMsg As String, strTitle As String
            strMsg = "You have edited this record. Do you want to save the changes?"
            strTitle = "Save Record?"
            If MsgBox(strMsg, vbQuestion + vbYesNo, strTitle) = vbNo Then
                Me.Undo
            Else
                ''Save record
                Me.Dirty = False
                ''Clear undo list
                DoCmd.RunMacro "ClearUndo"
            End If
        End If
    
    End Sub
    

    【讨论】:

    • 非常感谢,我刚刚意识到您回答了我的问题。将查看它并提供适当的反馈;)
    猜你喜欢
    • 2021-05-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2013-09-05
    • 2020-06-21
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    相关资源
    最近更新 更多