这是对这篇文章的一个跟进问题: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
结尾的名称。我想要做的是点击按钮,检查并查看右侧的哪些字段已填写,并询问用户是否要确认记录的更改。
答案 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.
如果用户决定不保存您的更改或您尝试实施的任何逻辑,则可以修改上述代码以返回布尔值以停止进一步执行。