在访问中我试图不让用户退出文本框,除非他们填写了它(即没有留下它为空)。这是在函数中完成的,以减少代码。在VBA中是否有某种方法可以阻止用户退出该功能? (我知道如何设置焦点,但我需要代码可以从多个不同的文本框中工作)
作为参考,我目前的代码如下;
Function Reload()
If IsNull(EmployeeID.Value) Or IsNull([First Name].Value) Or IsNull([Surname].Value) Or IsNull(DOB.Value) Or IsNull(Position.Value) Or IsNull(Position.Value) Or IsNull(Mobile.Value) Or IsNull(Email.Value) Or IsNull(Address.Value) Or IsNull(Suburb.Value) Or IsNull(Postcode.Value) Or IsNull([Start Date].Value) Or IsNull(UserLogin.Value) Or IsNull(UserPassword.Value) Then
MsgBox "Please fill out all fields"
Else
DoCmd.RunCommand acCmdSaveRecord
Form.Refresh
End If
End Function
由于
答案 0 :(得分:0)
我所知道的最好的技术是使用BeforeUpdate
事件来运行数据验证。如果数据无效,请使用if语句,然后设置
Cancel = True
并且数据不会写入。您可能更喜欢禁用默认记录导航并形成关闭按钮并使用自定义按钮,以便您可以捕获无效数据错误并阻止移动到新记录或关闭表单。但即使您允许用户使用内置的导航按钮或关闭按钮,Access也会抛出有关无法保存当前记录的错误消息,并提示用户是否要继续。
您还可以更进一步,捕获哪些字段无效并显示消息框。
Msgbox ("The following fields were left blank and must be entered to save this record:" & vbCrLf & "Field 1" & vbCrLf & "Field 2")
答案 1 :(得分:0)
我在聊天室中使用的文本输入限制器的一点修改应该会有所帮助。新功能我称之为MustINPUT并在文本框的LostFocus上调用它,你不想在输入时移动它。
Private Sub MyTextBox_LostFocus()
Call MustINPUT (Me.MyTextBox, 0)
End Sub
只需为您的用户更改消息。
Sub MustINPUT(ctl As Control, iMaxLen As Integer)
'Call MustINPUT(Me.txtSayThis, 0)
If Len(ctl.Text) = iMaxLen Then
MsgBox "Please Type something", vbExclamation, "Input Needed"
ctl.Text = Left(ctl.Text, iMaxLen)
ctl.SelStart = iMaxLen
End If
End Sub
希望这有帮助。 DR,