首页 > 解决方案 > 如果“更新前/更新后”的 VBA 处于活动状态,则 Access 女士会在更新或插入数据输入开始后将我锁定在行上

问题描述

我在使用 MS Access 时遇到问题,如果我更改行中的任何值,它会将我锁定在行内。所以它只会让我在我击中逃跑时脱身,失去我所有的变化。奇怪的是,这种行为只有在该表单的 VBA 正文中有“更新后/插入后”触发器时才会发生。

下面是更新触发器之后/之前的 VBA 代码示例:

    Option Compare Database
Option Explicit

Private Sub Form_AfterUpdate()
    If Form_update2.ComboItemization.Value = "LENS" Then
        Me.hpa_ccode_rule.Value = Me.hpa_inv_desc.Value
    End If
End Sub

Private Sub Form_BeforeUpdate(Cancel As Integer)
    Me.hpa_hcpc_desc.Value = Me.hpa_inv_desc.Value
    Me.hpa_proc_code.Value = Me.hpa_plan.Value
    Me.hpa_hcpc_code.Value = Me.hpa_itemize_cat.Value
    Me.hpa_non_disc.Value = "D"
    Me.hpa_inv_box.Value = "N"

    If Left(Form_update2.Txt_Price_Type, 1) = "A" Then
        Me.hpa_dtl_aod.Value = "A"
        Me.hpa_rlp.Value = "P"
        Me.hpa_itm_aod.Value = Null
    ElseIf Left(Form_update2.Txt_Price_Type, 1) = "P" Then
        Me.hpa_dtl_aod.Value = Null
        Me.hpa_rlp.Value = "J"
        Me.hpa_itm_aod.Value = "P"
    ElseIf Left(Form_update2.Txt_Price_Type, 1) = "M" Then
        Me.hpa_dtl_aod.Value = Null
        Me.hpa_rlp.Value = "P"
        Me.hpa_itm_aod.Value = "M"
    End If
End Sub

真的谢谢

标签: vbaformsms-access

解决方案


幸运的是,在尝试了更多之后,我得到了导致错误的原因。但我不知道如何解释。

  1. ="Null" 语句需要转换为 =""
  2. “If Form_update2.ComboItemization.Value = LENS”需要替换为“If Trim(Me.hpa_itemize_cat) = LENS”。
  3. 最后,需要将“更新后”块移动到“更新前”。

下面是最终代码:

Private Sub Form_BeforeUpdate(Cancel As Integer)

Me.hpa_hcpc_desc.Value = Me.hpa_inv_desc.Value
Me.hpa_proc_code.Value = Me.hpa_plan.Value
Me.hpa_hcpc_code.Value = Me.hpa_itemize_cat.Value
Me.hpa_non_disc.Value = "D"
Me.hpa_inv_box.Value = "N"

If Left(Form_update2.Txt_Price_Type, 1) = "A" Then
    Me.hpa_dtl_aod.Value = "A"
    Me.hpa_rlp.Value = "P"
    Me.hpa_itm_aod.Value = ""
           
ElseIf Left(Form_update2.Txt_Price_Type, 1) = "P" Then
    Me.hpa_dtl_aod.Value = ""
    Me.hpa_rlp.Value = "J"
    Me.hpa_itm_aod.Value = "P"
    
ElseIf Left(Form_update2.Txt_Price_Type, 1) = "M" Then
    Me.hpa_dtl_aod.Value = ""
    Me.hpa_rlp.Value = "P"
    Me.hpa_itm_aod.Value = "M"
End If
 
If Trim(Me.hpa_itemize_cat) = "LENS" Then
    Me.hpa_ccode_rule.Value = Left(Me.hpa_inv_desc.Text, 15)
End If
End Sub

我希望有人能给出比我最好的答案,因为我认为我的答案并不完整。一旦它错过了对上述第 1 点和第 3 点的解释。


推荐阅读