2017-09-02 52 views
0

在访问我试图不让用户退出一个文本框,除非他们已经填写了它(即不保留它为空)。这是为了减少代码的功能。在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

设置重新加载文本框对象的参数,然后在空检查中引用参数名称? – Dave

+0

我已经试过这个,但它似乎没有工作 – Everton

+0

“它不工作”并不能真正帮助我们确定什么不起作用。你可以说得更详细点吗? – Dave

回答

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") 
+0

谢尔盖,我想知道你是如何编辑的,所以代码看起来是如何做到的。谢谢。 – codenovice31415

+0

https://stackoverflow.com/editing-help @ codenovice31415 – Andre

0

稍微修改我在聊天室中使用的文本输入限制器应该会有所帮助。新函数我将它称为MustINPUT,并将它称为文本框的LostFocus,您不希望从out输入中移出文本框。

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,