我有一個拆分表單,頂部有一些按鈕(cmd)和組合框(cbo)。該表格基于具有客戶屬性的表格。問題是如何鎖定記錄無法編輯,但允許使用 cmd 和 cbo。
大多數編輯被禁用me.allowedits = false。時.allowedits = false,無法觸發on_click事件,因此按鈕和組合不起作用。
我已經嘗試過使用.alloweditsongetFocus/lostFocus事件的臨時切換的解決方案。
乍一看,它有效。單擊按鈕時,我們getFocus-edits首先啟用,并且可以使用按鈕或 cbo。任何新按鈕首先觸發 lostfocus 事件,我們有初始鎖定狀態。
但這并不總是有效。如果用戶在使用控制元件后嘗試編輯記錄,lostFocus則不會觸發并且仍然允許編輯。
另一種流行的解決方案是一個一個地鎖定一些控制元件。當有很多欄位和按鈕時,這種方式非常復雜。
也許可以將表單記錄集模式從動態集動態切換到快照?或者lostfocus在編輯欄位之前更改某些內容以具有按鈕事件?或者也許有更好的方法來鎖定記錄而不是按鈕?幫助將不勝感激。
討論后編輯。在社區的幫助下,改變的方法.RecordsetType被認為是最好的。我已經測驗過了,并在此處發布了代碼。
然后我遇到了新的限制。代碼與切換按鈕完美配合。但是當我在表單AfterUpdate事件中使用它時,仍然可以編輯記錄,盡管Me.RecordsetType設定為快照。(我的愿望是在每次編輯完成后再次關閉編輯模式)。
目前,我不知道為什么Snapshot在AfterUpdate程式中設定時模式不鎖定編輯。
我已經繞過了。我發現,在 Form_Current 事件中,它是Snapshot有效的。所以,繞過代碼:
Private Sub Form_AfterUpdate()
'Bypass for locking edit after change record
TempVars("AftUpd") = True
End Sub
Private Sub Form_Current()
'Bypass for locking edit after change record
If TempVars("AftUpd") = True Then
TempVars.Remove ("AftUpd")
' release AllowEdit-ToggleButton, and making this button release actions
tbuAllowEdit.Value = False
Call tbuAllowEdit_Click
End If
End Sub
這行得通,所以我會就此打住。
盡管如此,如果有人有想法,為什么Snapshot方法不起作用AfterUpdate,或者如何解決這個問題,請分享。
uj5u.com熱心網友回復:
感謝您提供的所有提示。這真的很有幫助。因此,我可以說,除getFocus/之外的所有 3 種方法lostFocus都可以使用。
No 3 - 使用控制鎖。我們可以鎖定文本型別的所有欄位,而讓所有其他欄位保持空閑-回圈就足夠了。不確定,如何使用條件格式來做到這一點,但可能是可能的。
沒有 2 - 因為按鈕沒有被鎖定(我錯過了這個),我們可以用按鈕加指示器替換切換按鈕。(事實上??,我需要切換按鈕)。此解決方案僅涉及切換按鈕,而不涉及復選框。
和1號,大概,贏家:開關.RecordsetType從Dynaset對Snapshot和背部。它只鎖定記錄,不鎖定其他控制元件。幾乎是理想的,在設計或代碼方面沒有妥協。其實這是微軟推薦的鎖定編輯方法:https :
//support.microsoft.com/en-us/office/recordsettype-property-dbe9dd7a-cc73-4539-aaa7-9e6b55034052
唯一的缺點是切換時,指標位置總是指向第一條記錄。但看起來這可以通過簡單的代碼來修復(在 ms.docs 訪問站點中找到,https: //docs.microsoft.com/en-us/office/troubleshoot/access/move-to-specific-record-from-combo -box-selection,方法1)。
使用一個切換按鈕進行測驗,效果完美。結果代碼是
Private Sub Toggle7_Click()
Dim rs
Dim IdRem
IdRem = Me.ID
If Toggle7 = True Then
Me.RecordsetType = 0 ' allow edits
Else
Me.RecordsetType = 2
End If
Set rs = Me.Recordset.Clone
rs.FindFirst "[ID] = " & Nz(IdRem)
If Not rs.EOF Then Me.Bookmark = rs.Bookmark
Set rs = Nothing
End Sub
在我的真實基地實施后,我遇到了這種方法的另一個限制。在主要問題編輯部分對此進行了描述。
uj5u.com熱心網友回復:
您可以將每個單獨的文本框的“鎖定”屬性設定為“否”。
并將按鈕和組合框的“鎖定”屬性保留為“是”。
在設計視圖中:您可以多選控制元件并將它們全部鎖定。
或者在 VBA 中,您可以使用 Bryan Rock 所寫的帶有“標簽”的技巧,或者給控制元件一個以“ Lock ”開頭的名稱,以便在回圈中識別它們。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/359381.html
