Microsoft Visual Basic运行时错误

时间:2015-03-10 18:17:16

标签: ms-access access-vba

我正在使用MS Access 2007和VBA。我有一个代码块,当数量大于库存或库存为零时触发。

Private Sub Quantity_BeforeUpdate(Cancel As Integer)
    If Me.Quantity > Me.Stock Or Me.Stock = 0 Then
        MsgBox "Not enough stocks left."
        Me.Quantity = ""
    End If
End Sub

出现消息框但在此之后出现错误消息:

Run-time error '2147352567 (80020009)':

The macro or function set to BeforeUpdate or ValidationRule property for this field is preventing Microsoft Office Access from saving the data in the field.

如何阻止此错误?

2 个答案:

答案 0 :(得分:2)

控件的更新前事件不允许您将其更改为任何值。此时您有2个选项:

  1. 致电Cancel,然后致电Undo将其值恢复为尝试更新前的状态
  2. 仅调用Cancel,保留新的(不可接受的)值,但在继续之前强制用户将其替换为可接受的值
  3. 这是第一个选项的测试示例代码。如果您更喜欢第二个选项,请丢弃Me.Quantity.Undo行。

    Private Sub Quantity_BeforeUpdate(Cancel As Integer)
        If Me.Quantity > Me.Stock Or Me.Stock = 0 Then
            MsgBox "Not enough stocks left."
            'Me.Quantity = "" ' <-- NOT ALLOWED
            Cancel = True
            Me.Quantity.Undo
        End If
    End Sub
    

    Me.QuantityMe.Stock是包含数字的文本值时,情况会更复杂。如果是我,我宁愿将他们的数据类型更改为数字。但如果这种变化不切实际,您可以使用Val()将文本值转换为实际数字,以便进行比较。

    Private Sub Quantity_BeforeUpdate(Cancel As Integer)
        If Val(Me.Quantity) > Val(Me.Stock) Or Val(Me.Stock) = 0 Then
            MsgBox "Not enough stocks left."
            'Me.Quantity = "" ' <-- NOT ALLOWED
            Cancel = True
            Me.Quantity.Undo
        End If
    End Sub
    

答案 1 :(得分:1)

在MS Access中,您无法在&#34; BeforeUpdate&#34;中设置控制值。事件。所以这一行:

Me.Quantity = ""

导致您的错误消息。因此,您需要寻找另一种方法来完成您尝试做的事情。我认为&#34; AfterUpdate&#34;活动将适用于您正在寻找的东西。