如何引用用户当前的文本框?

时间:2017-09-02 23:24:48

标签: vba ms-access null textbox focus

在访问中我试图不让用户退出文本框,除非他们填写了它(即没有留下它为空)。这是在函数中完成的,以减少代码。在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

由于

2 个答案:

答案 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,