访问公共功能以维护组合列表

时间:2017-08-18 13:11:22

标签: vba function ms-access openargs

我的应用程序中有40多个组合控件。我正在开发一个公共函数,放入每个组合的not in list事件中。目标是有一个连续的弹出窗体,如果用户说他们想要为组合添加新值,它将打开。 open form命令将为

传递open args
  1. 记录来源
  2. 连续表单上的1文本框的控制源(通常是类型)
  3. 控制源的标签。
  4. 我在通过开放的args时遇到了一些麻烦。我debug.print部分的args,我可以拆分它们,当它们通过时(不一致的结果让开放的args正确传递,当我尝试调试),我似乎无法设置弹出的记录源形式正确。我曾经尝试过一次做一次,但似乎仍然无法得到它。

    这是公共职能: 选项明确

    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事件中调用它的方式: 选项明确     Private Sub FKAuditType_NotInList(NewData As String,Response As Integer)         D1 a1 As String         Dim a2 As String         D7 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: 选项明确

    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 = 
    

    我得到每个值,但是打开的args为null。什么鬼,贝克?

    任何人都可以帮助指导这个无能的编码器吗?洛尔

    谢谢!

    我编辑了这个以更新代码,并进行了更改。现在它正在运作!至少是整个过程的第一部分。 openargs传递,弹出窗体正常工作。当我点击该表单上的关闭时,我回到了带有notinlist组合的表单上。这恢复了它的过程并收到一条消息:您输入的文本不是列表中的项目。

    它知道这是默认的notinlist消息。问题是,公共功能应该处理这个问题。它有,如果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
    

    任何人都知道如何调整此信息以阻止该消息,但不仅仅是禁用所有警告?

    谢谢!

    知道了!在不在列表中,在我调用公共函数之后,我必须添加:

    Response = acDataErrContinue

    这是让默认的错误信息占据一席之地。

    感谢您的帮助!这将使每个darn组合的设置变得更加容易!!!!

0 个答案:

没有答案