在数据验证表单中,我有一个子程序通过确保释放时间(表中的TimeReleased;表格中的Me.txtTimeReleased)在捕获时间之后(表中的ObservationTime; Me)检查先前输入的LostFocus事件数据表格上的.txtObservationTime)。我正在使用LostFocus而不是BeforeUpdate,因为数据已批量导入到数据库中,现在正在进行错误检查。
我的用户在附加了这个子附加的字段时不断收到编译错误(编译错误:方法或数据成员未找到)但我无法在本地重现该问题。此行发生错误:
If (Me.txtTimeReleased) <= (Me.ObservationTime) Then
,突出显示的部分是'.txtTimeReleased'
完整代码块:
Private Sub txtTimeReleased_LostFocus()
Dim badData As Variant
Dim resp As Variant
'Also check that time released is after time captured
If Not IsNull(Me.txtObservationTime) And Not IsNull(Me.txtTimeReleased) Then
If (Me.txtTimeReleased) <= (Me.ObservationTime) Then
resp = MsgBox("Release time must be after capture time." & vbCrLf & "Please double check this field's value: is it correct?", _
vbYesNo + vbExclamation + vbDefaultButton2, "Release Time Before Capture Time")
If resp <> vbYes Then badData = True
End If
End If
If badData = True Then
Me.cmbTaxonId.SetFocus 'set focus away so can set focus back
With Me.txtTimeReleased
.SetFocus
.SelStart = 0
.SelLength = 10
End With
End If
End Sub
其他注意事项:
我尝试过的事情:
对我来说很奇怪的事情:
感谢您的时间,如果有任何有用的其他信息,请告诉我。任何想法都是最受欢迎的!
答案 0 :(得分:2)
您检查了Null txtObservationTime和txtTimeReleased,但比较了txtTimeReleased和ObservationTime。也许解决方案是:
If Not IsNull(Me.txtObservationTime) And Not IsNull(Me.txtTimeReleased) Then
If (Me.txtTimeReleased) <= (Me.txtObservationTime) Then
答案 1 :(得分:1)
我建议你使用变量:
intThat = Me.txtTimeReleased
If intThis <= intThat Then
尝试使用!
代替点:
intThat = Me!txtTimeReleased
If intThis <= intThat Then
现在,上周对我有用的答案是:
编译现在可以正常工作。不要问我为什么。
答案 2 :(得分:1)
打开带有/decompile
标志的.mdb是我建议的第一件事,但你说你已经尝试过了。
这是另一个未记录的技巧,用于处理VBA在幕后烘焙的“隐藏”编译问题:
首先,制作.mdb的备份副本只是为了安全(毕竟,这是一种未记录的技术)。
然后,使用SaveAsText:
将表单保存到文本文件中SaveAsText acForm, "MyFormName", "C:\MyFormName.txt"
最后,使用同样未记录的LoadFromText:
重新加载表单LoadFromText acForm, "MyFormName", "C:\MyFormName.txt"
编译。
紧凑。
修复。
希望最好的。