0

私は、私のような初心者にとって、それが非常に単純な質問だと思ったものに対する答えを探して水をサーフィンしてきました。簡単にするために、少し頭痛の種となる2ビットのコードを添付します。私がやろうとしているのは、ボタンをクリックして、読み取り専用モードから書き込み許可状態に切り替えることです。そうするために、私はルーチンにレコードの変更をチェックしてもらいたいのですが、変更があれば、変更を保存するか破棄するかをユーザーに尋ねます。この特定のボタンをテストしているときに、かなりの何かを見つけました。おかしい」..変更が導入されていない場合はうまくいくようです。読み取り専用状態から書き込み許可状態に完全に切り替わります。ただし、「保存オプション」の場合、書き込み許可および変更が行われている場合

これに密接に関連する私のもう1つの問題は、元に戻すオプションの「保存ポイント」を設定する方法が見つからないことです。「レコードを保存」する方法を見つけたいので、元に戻すボタンを押しても、データベースを最初に開いてから(現在のように)レコードが受けたすべての変更を元に戻すことはできませんが、ボタンを押した後は押された。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
4

1 に答える 1

0

次のコードが必要だと思います。フォームがバインドされ、フォームに影響を与えるテーブルを開くことはできません。テーブルを開くと、2 つの異なるインスタンスがあり、互いに影響しません。

Office アプリケーションでマクロを実行すると、元に戻すリストがクリアされるという奇妙な副作用が生じるため、"元に戻すがクリアされました" というメッセージを表示するだけの小さなマクロを作成しました。

余談ですが、コントロールの名前を Command28 ではなく cmdLock などの意味のある名前に変更してください。

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
于 2013-02-21T12:47:37.540 に答える