Access VBA中的通配符

时间:2015-08-11 13:08:27

标签: vba ms-access access-vba wildcard ms-access-2013

这是对这篇文章的一个跟进问题:Access VBA recordset string comparison not working with wildcard但是我没有代表回答/评论它在内部提问。我很好奇的是这行代码具体:

If ![ACOD] = "*_X" Then '"$ICP_X" works
        Debug.Print ![ACOD] 'For testing
        '.Delete
End If

我想知道是否可以修改它,以便在按钮单击时,它会查看字段名称为*_New的表单中的所有字段(希望捕获名称结尾的所有字段) _New)如果它们不是Null,则确认用户想要进行字段中指示的更改。我在想这样的事情:

If Not isNull(*_New.value) Then
   If Msgbox ("Do you want to make these changes?",vbOKCancel, "Confirm Changes") = 1 Then
      '### Do something with the record ###
   End If
End If

修改

截至发布上述信息时,我没有安装Microsoft VBScript正则表达式参考,目前我有5.5版(这是最新版本)。安装(引用?)并查看来自此网站MS Access with VBA Regex的信息,我想知道做这样的事情是否更好:

Dim re As RegExp
Set re = New RegExp
re.IgnoreCase = True
re.Global = True
re.Pattern = "*_New"
If ##Not sure on syntax to match all fields## Then
   Msgbox(##Same stuff as above MsgBox##)
End If

编辑2

这是我正在处理的表单的示例案例。右侧的每个字段都具有以_New结尾的名称。我想要做的是点击按钮,检查并查看右侧的哪些字段已填写,并询问用户是否要确认记录的更改。

Sample case for testing form

1 个答案:

答案 0 :(得分:1)

不确定您要实现的目标,但有一种方法可以访问表单中的控件集合。这是一个公共函数,您可以遍历所有控件并检查其名称。

Public Function FN_CONFIRM_CHANGES(iSender As Form)
    Dim mCtl As control
    For Each mCtl In iSender
        If VBA.Right(mCtl.name, 4) = "_New" Then
            Debug.Print mCtl.name & " is a match and its a " & VBA.TypeName(mCtl)
        End If
    Next mCtl
End Function

将此功能称为

FN_CONFIRM_CHANGES Me 'Where me is referencing the form you are in.

如果用户决定不保存您的更改或您尝试实施的任何逻辑,则可以修改上述代码以返回布尔值以停止进一步执行。