我正在尝试在更新后以表单的形式设置焦点。当我在forms类模块中这样做时,我没有问题。但是,我需要用几个表单来完成这个任务,所以我尝试在模块中编写它。我的问题是,除非我硬编码类模块中的表单名,否则我无法让.SetFocus工作。WHno是我试图设置焦点的控件的名称。
我尝试了许多选择,但似乎没有一个可行。
这是潜艇。除了.SetFocus过程之外,一切都运行得很好。
Sub ValidateWHNO()
Dim EnteredWHNO As Integer
Dim actForm As String
Dim deWHNO As Variant
msg As Integer
Dim ctrlWHNO As Control
EnteredWHNO = Screen.ActiveControl.Value
actForm = Screen.ActiveForm.Name
Set ctrlWHNO = [Forms]![frmEnterBookData]![WHno]
deWHNO = DLookup("[WHno]", "tblDataEntry", "[WHno] = " & EnteredWHNO)
If EnteredWHNO = deWHNO Then
msg = MsgBox("You have already entered " & EnteredWHNO & " as a WHNO. The next number is " & DMax("[WHno]", "tblDataEntry") + 1 & ", use this?", 4 + 64, "Already Used WHno!")
If msg = 6 Then
Screen.ActiveControl.Value = DMax("[WHno]", "tblDataEntry") + 1
Else
Screen.ActiveControl.Value = Null
ctrlWHNO.SetFocus 'CODE THAT WONT RUN
End If
End If
End Sub我尝试过许多其他方法来设置焦点,例如:Forms(actForm).WHno.SetFocus、Forms(actForm).Controls(WHno).SetFocus、Screen.ActiveControl.SetFocus
当前的结果是,如果在MsgBox中选择了No,则该值将被清除,但焦点将移动到下一个控件。
感谢您提供的任何帮助。
发布于 2014-06-27 21:41:59
下面的内容会有什么不同吗?
Sub ValidateWHNO(frm as Access.Form)
Dim EnteredWHNO As Integer
Dim actForm As String
Dim deWHNO As Variant
msg As Integer
EnteredWHNO = frm.ActiveControl.Value
actForm = frm.Name
deWHNO = DLookup("[WHno]", "tblDataEntry", "[WHno] = " & EnteredWHNO)
If EnteredWHNO = deWHNO Then
msg = MsgBox("You have already entered " & EnteredWHNO & " as a WHNO. The next number is " & DMax("[WHno]", "tblDataEntry") + 1 & ", use this?", 4 + 64, "Already Used WHno!")
If msg = 6 Then
frm.ActiveControl.Value = DMax("[WHno]", "tblDataEntry") + 1
Else
frm.ActiveControl.Value = Null
frm![WHno].SetFocus
End If
End If
End Sub你在每一份表格上的要求是:
VaidateWHNO Me代码不使用对表单的相对引用(Screen.ActiveForm),而是直接传递表单引用,并将该引用用作.setFocus方法的父引用。
https://stackoverflow.com/questions/24457624
复制相似问题