【问题标题】:Microsoft Visual Basic Run-time errorMicrosoft Visual Basic 运行时错误
【发布时间】:2016-10-04 03:22:12
【问题描述】:

我正在使用 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.

如何停止这个错误?

【问题讨论】:

    标签: ms-access vba


    【解决方案1】:

    控件的 Before Update 事件不允许您将其更改为任何值。那时你有两个选择:

    1. 调用Cancel,然后调用Undo 将其值恢复为尝试更新之前的值
    2. 仅调用 Cancel,保留新的(不可接受的)值,但强制用户在继续之前将其替换为可接受的值

    这里是第一个选项的测试示例代码。如果您更喜欢第二个选项,请放弃 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
    

    【讨论】:

    • 有趣的是,我很少看到使用 Undo 或 Cancel 的机会,我从未想过要在答案中使用。
    • 谢谢。但另一个问题发生了。当我在数量字段中输入大于 1 时,它会显示消息框“剩余库存不足”。例如,该产品的库存为 100,当我输入 2 或以上时,它会执行 msgbox。有什么想法吗?
    • Access 是否理解 Me.QuantityMe.Stock 都是数字数据类型而不是文本?
    • 数量和库存字段的数据类型是文本,我应该更改数据类型吗?
    • 如果 Me.Quantity 是一个字段而不是一个控件,那么该值是否仍然是上次的值,因为这是在更新前的事件中。所以这样做不应该更像 Me.txtQuantity (指一个控件)还是我疯了?
    【解决方案2】:

    在 MS Access 中,您不能在“更新前”事件中设置控件值。所以这一行:

    Me.Quantity = ""
    

    导致您的错误消息。因此,您将需要寻找另一种方法来做您正在尝试做的事情。我认为“AfterUpdate”事件将适用于您正在寻找的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-25
      • 2020-05-16
      • 2022-08-23
      • 1970-01-01
      相关资源
      最近更新 更多