首页 > 解决方案 > 如何在更改字段时运行宏,而不是在该字段的原始条目上运行宏?

问题描述

我创建了一个项目数据库,其中包含一个表单,其中包含供员工在项目启动时完成的字段。

第一个字段“ClientCode”是客户的强制性下拉列表(组合框)。

为避免意外更改此字段,我添加了“更改时”代码以显示警告消息:

Private Sub ComboClientCode_Change()
If MsgBox("Are you sure you want to change the client?", vbQuestion + vbYesNo) = vbNo Then
    DoCmd.RunCommand acCmdUndo
Else
    Exit Sub
End If
End Sub

它可以工作,但是我不希望它在有人开始新记录时运行,即第一次选择客户端。

我如何让这条消息只显示它是否是对原始条目的更改?

我尝试将其移至“更新后”,但它做同样的事情。

标签: vbams-access

解决方案


您可以在第一次更改组合框时更改组合框的“不相关”属性之一。

Private Sub ComboClientCode_Change()
    If ComboClientCode.ColumnHeads = False Then
        ComboClientCode.ColumnHeads = True
    Else
        If MsgBox("Are you sure you want to change the client?", vbQuestion + vbYesNo) = vbNo Then
            'DoCmd.RunCommand acCmdUndo
            Debug.Print "DoCmd.RunCommand acCmdUndo"
        Else
            Exit Sub
        End If
    End If
End Sub

应该适用于这种类型:

类型

上述选定类型的列出属性:

特性

如果它有一个值,您可以运行它来进行现有的更改:

Sub Switch()
    If ComboClientCode.Value <> "" Then
        ComboClientCode.ColumnHeads = True
    Else
        ComboClientCode.ColumnHeads = False
    End If
End Sub

推荐阅读