我的应用程序中有 40 多个组合控件。我正在开发一个公共功能,将每个组合的不在列表中的事件放入其中。目标是有 1 个连续弹出表单,如果用户说他们想为组合添加新值,它将打开。open form 命令将传递 open args 的
- 记录源
- 连续表单上 1 文本框的控制源(通常是类型)
- 控制源的标签。
我在让它通过开放参数时遇到了一些麻烦。我 debug.print args 的各个部分,当它们通过时,我可以拆分它们(当我尝试调试时,使打开的 args 正确传递的结果不一致),并且我似乎无法为弹出窗口设置记录源正确形成。我试过一次做1,但似乎仍然无法得到它。
这是公共函数:Option Explicit
Public Function TypeNotInList(ctl As Control, arg1 As String, arg2 As Variant, arg3 As String)
On Error GoTo Err_TypeNotInList
Dim Msg, Style, Title
'arg1 is the row source of the combo, to be passed as the recordsource for the frmAddTypeVal form
'arg2 is the control source of the combo, to be passed as the control source for the text box in the frmAddTypeVal form
'arg3 is the label of the combo, to be used for messages, and the label of the text box in the frmAddTypeVal form
Msg = "The " & arg3 & " you entered is not in the " & arg3 & " list, would you like to add it now?"
Style = vbYesNo
Title = "Type or listing must be maintained"
Response = MsgBox(Msg, Style, Title)
If Response = vbYes Then
ctl.Undo
DoCmd.OpenForm "frmAddTypeVal", acNormal, , , , acDialog, arg1 & "|" & arg2 & "|" & arg3
ctl.Requery
End If
Exit_TypeNotInList:
Exit Function
Err_TypeNotInList:
MsgBox Err.Description
Resume Exit_TypeNotInList
End Function
这就是我在 1 个组合的 Not In List 事件中的称呼方式: Option Explicit Private Sub FKAuditType_NotInList(NewData As String, Response As Integer) Dim a1 As String Dim a2 As String Dim a3 As String
a1 = Me.FKTypeXYZ.RowSource
a2 = "txtXYZType"
a3 = Me.lblTypeXYZ.Caption
TypeNotInList Me.FKTypeXYZ, a1, a2, a3
Response = acDataErrContinue
End Sub
那应该是调用公共函数,并传递 4 个参数。
这是通用连续弹出表单的表单加载,称为frmAddTypeVal:Option Explicit
Private Sub Form_Load()
Dim VarArgs() As String
VarArgs = Split(Me.OpenArgs, "|")
Me.Form.RecordSource = VarArgs(0)
Me.txtType.ControlSource = VarArgs(1)
Me.lblType.Caption = VarArgs(2)
End Sub
当我按原样运行时,我的 debug.print (s) 给了我以下信息:
ctl = FKFKTypeXYZ
arg1 = SELECT tblXYZType.ID, tblXYZType.txtXYZType FROM tblXYZType ORDER BY tblXYZType.txtXYZType;
arg2 = FKXYZType
arg3 = XYZ Type
openargs =
我得到每个值,但打开的参数为空。怎么回事,贝克?
任何人都可以帮助指导这个无知的编码员吗?哈哈
谢谢!
我对此进行了编辑以更新代码,并进行了更改。现在它正在工作!至少是该过程的第一部分。openargs 被传递并且弹出表单正常工作。当我在该表单上单击关闭时,我又回到了带有 notinlist 组合的表单上。这将恢复它的过程,我收到一条消息:您输入的文本不是列表中的项目。
它知道这是默认的 notinlist 消息。问题是,公共功能应该处理这个问题。它有,在 if Response = vbYes Then
ctl.undo
'undo trying to add a value that is not in the list yet
然后在打开表格之后(我认为这将涉及该表格的关闭)
ctl.requery
'requery the combo, so the added value(s) can be seen
任何人都知道我可以如何调整它以防止该消息,但不只是禁用所有警告?
谢谢!
知道了!在 not in 列表中,调用公共函数后,我必须添加:
响应 = acDataErrContinue
这让我们默认错误消息坐下大声笑。
感谢所有的帮助!这将使为每个该死的组合设置它变得更加容易!!!!