1

我的应用程序中有 40 多个组合控件。我正在开发一个公共功能,将每个组合的不在列表中的事件放入其中。目标是有 1 个连续弹出表单,如果用户说他们想为组合添加新值,它将打开。open form 命令将传递 open args 的

  1. 记录源
  2. 连续表单上 1 文本框的控制源(通常是类型)
  3. 控制源的标签。

我在让它通过开放参数时遇到了一些麻烦。我 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

这让我们默认错误消息坐下大声笑。

感谢所有的帮助!这将使为每个该死的组合设置它变得更加容易!!!!

4

0 回答 0