微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如果“更新前/更新后”的 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

真的很感谢

解决方法

幸运的是,在尝试了更多之后,我明白了导致错误的原因。但我不知道怎么解释。

  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 点的解释。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。