我是Access的新手,试图通过我在这里找到的有用信息拼凑起来。
我有一个表单,需要根据表单标题中的组合框选择填充字段。该表单基于一个基础查询,其字段为“StudID”[Forms]![frmStudConsentUpdate]![cmbStud],其中cmbStud是我的组合框。组合框拉入StudID,StudFN,StudLN与StudID作为绑定列。更新后事件重新查询表单(Me.Requery)。这非常有效,但只有在设计视图中首次打开表单时,才打开Record Source并保存。我根本没有做任何改变,但是一旦我完成了这个,表格就可以了。否则,当我在组合框中选择学生时没有任何反应。有关我需要做什么才能使其工作而不必重新保存基础查询的任何想法?
答案 0 :(得分:0)
这是MS Access中的旧错误,我不知道为什么他们仍然没有修复它: 如果基础表单的查询具有条件形式的控件并且表单已过滤一次(在开始时或手动/使用VBA),则它不会接受来自表单控件的新值使用旧值。
解决方法:创建公共函数,它返回控件的值并在标准中使用它而不是[Forms]![frmStudConsentUpdate]![cmbStud]
。您需要为每个控件创建函数或使用此函数:
Public Function GetControlValue(strFormName As String, strControlName As String, Optional strSubFormControlName As Variant, Optional varDefault As Variant) As Variant
' Returns : Variant, value of control in form/subform
' Comments:
' Params :
' strFormName
' strControlName
' strSubFormControlName
' varDefault - value returned if control is not accessible
'----------------------------------------------------------------------------
On Error GoTo ErrorHandler
If IsMissing(strSubFormControlName) Or Nz(strSubFormControlName, "") = "" Then
GetControlValue = Forms(strFormName).Controls(strControlName).Value
Else
GetControlValue = Forms(strFormName).Controls(strSubFormControlName).Form.Controls(strControlName).Value
End If
ExitHere:
On Error Resume Next
Exit Function
ErrorHandler:
If Not IsMissing(varDefault) Then
GetControlValue = varDefault
End If
Resume ExitHere
End Function
在条件中使用函数调用GetControlValue("frmStudConsentUpdate","cmbStud")
而不是[Forms]![frmStudConsentUpdate]![cmbStud]
答案 1 :(得分:0)
在cmbStud组合框的后续更新中,创建将记录源刷新为
的代码{{1}}