【问题标题】:Wildcard in Access VBAAccess VBA 中的通配符
【发布时间】:2015-08-11 13:08:27
【问题描述】:

这是对这篇文章的后续问题: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 的表单中的所有字段(希望捕获名称以 @987654327 结尾的所有字段@),如果不是 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 结尾。我要做的是单击按钮,检查并查看右侧的哪些字段已填写,并询问用户是否要确认对记录的更改。

【问题讨论】:

  • 您将这个问题作为一个新问题提出是正确的 - 在 StackOverflow 上,所有问题都可以单独进行搜索,而不是隐藏在另一个问题中。链接到该相关问题是开始它的好方法!
  • 所有字段是什么意思?只是文本框或任何类型的控件?
  • 顺便说一句:上一个问题与SQL有关,它与在表单/对象中搜索控件完全不同。
  • 上一个问题在 SQL 中得到了回答和处理,是的,但最初是针对 VBA 提出的(据我所知)。
  • 那看起来怎么样?我不想在他们自己的 if 语句中检查每个单独的字段。

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


【解决方案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.

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

【讨论】:

  • 我想要实现的是在表单中搜索名称以_New 结尾的字段,并检查在与@987654325 匹配的字段中是否有除默认Null 值以外的任何其他值@ 标准。由于我现在有更多代表(当我发布问题时我只有 10 个代表),我将编辑我的 OP 并附上我的表格截图。希望它会澄清一些事情
  • 如果您的表单是有界表单,您的所有更改都会自动保存。我认为为每个控件提示消息不是一个好主意。如果您有超过 10 个控件,我个人不想单击 10 次来保存记录。 @特拉维斯帕特森
  • 当然,我也不会。我的意思是最终它将是一个消息框或显示即将被编辑为列表的字段(而不是每个控件的单个消息框),并带有一个取消按钮(vbOKCancel)以允许他们去返回并更改它。
  • 根据我与客户合作的经验,我可以告诉你一些事情......你的最终用户永远不会费心阅读消息框上的内容。他们会为任何事情点击“是”,如果他们不想点击“否”。只需执行一个问题。你想保存更改的是/否就是这样...@TravisPatterson
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-19
  • 1970-01-01
相关资源
最近更新 更多