【问题标题】:Access, Opening the Same Form in Different ways using Buttons使用按钮以不同方式访问、打开同一个表单
【发布时间】:2014-12-09 11:52:54
【问题描述】:

我在工作中使用 Access 2007 并尝试构建数据库。我想知道是否可以在“主菜单”表单上有两个不同的按钮来打开相同的“数据输入”表单。但是,一个按钮会自动转到新的空白记录进行数据输入,另一个按钮会提示用户输入特定的 ID #(绑定到表单中的字段),然后表单将在该记录上打开。这将用于更新该特定记录。

这可能吗?我是 VBA 代码的初学者。如果更高版本的 Access(但不是 2007)可以做到这一点,请告诉我。

【问题讨论】:

    标签: forms ms-access vba ms-access-2007


    【解决方案1】:

    在表单上创建两个按钮。让我们将它们命名为 addRecBtnopenRecBtn 让我们说您要打开的表单是 tmpFrmName。所以第一个按钮将以数据输入模式打开表单,第二个按钮将以正常编辑模式打开表单。

    代码应该是这样的,

    Private Sub addRecBtn_Click()
        DoCmd.OpenForm "tmpFrmName", DataMode:=acFormAdd
    End Sub
    

    第二个表单首先必须获取您尝试打开的号码,例如让我们将其称为 numberID。所以你的代码是。

    Private Sub openRecBtn_Click()
        Dim numID As Long
    
        numID = InputBox("Please enter the ID : ")
    
        If DCount("*", "yourTable", "numberID = " & numID) <> 0 Then
            DoCmd.OpenForm "tmpFrmName", WhereCondition:="numberID = " & numID
        Else
            MsgBox "The numberID : " & numID & " does not exist, please try again !"
        End If
    End Sub
    

    【讨论】:

    • 首先谢谢!!!这主要是有效的,但是当我输入记录的数字时,它会出现一个空白记录来添加新数据。我需要它来调用与该数字相关的现有记录,以便我可以向该记录添加新数据。我很近!
    • OpenForm 中包含 WhereCondition 选项以定位选定的 ID。
    • 是的!!!!看起来它工作得很好。非常感谢大家,这是有史以来最好的论坛。
    • 是的,我 +1。请注意InputBox()。它总是返回一个字符串值。当用户仅输入数字时,将该字符串隐式转换为 Long 将起作用。但是,如果用户输入了其他内容,例如“惊喜!”,单击“确定”而不输入任何内容,或单击“取消”,您的代码将引发类型不匹配错误。
    • @HansUp,绝对正确。我正在考虑编写更健壮的代码,但是当我完成编译时,我看到这可能是一个开始,如果 OP 需要更健壮的代码,这是可能的。所以我把它留在那里。我还看到您使用表单控件的方法也是确定的。 :)
    【解决方案2】:

    您可以使用 DoCmd.OpenForm 和不同的选项来实现您的两个目标。

    1. “一个按钮自动转到新的空白记录以进行数据输入”
    DoCmd.OpenForm FormName:="YourForm", View:=acNormal, DataMode:=acFormAdd
    
    1. “另一个按钮提示用户输入特定的 ID #(绑定到表单中的字段),然后表单将在该记录上打开”
    Dim strWhere As String
    strWhere = "[id]=" & Me.txtId
    Debug.Print strWhere ' <- inspect this in the Immediate window
    DoCmd.OpenForm FormName:="YourForm", View:=acNormal, WhereCondition=strWhere
    

    第一个表单包含一个名为 txtId 的文本框,其中包含要在第二个表单 (YourForm) 中设置为当前的 ID 值。

    【讨论】:

    • 抱歉澄清一下,txtId 可以替换为表单中已有的字段名称吗?我也没有得到“即时窗口”
    • 是的,我希望 txtID 成为“主窗体”上的一个文本框,供用户输入她的 ID 选择。如果您更喜欢 Paul 建议的 InputBox(),请改用它。
    • 即时窗口是 VB 编辑器功能,您可以在其中查看Debug.Print 的输出、在 VBA 中断模式下检查值、测试 VBA 语句等。熟悉它对您很有用.你可以使用 Ctrl+g 去那里。
    【解决方案3】:

    是的,有可能。

    我的建议是使用多个函数来实现 - 将“共享”功能放在一个(例如打开表单)中,然后针对差异,创建两个调用共享函数的函数

    例如

    function openForm()
    {
        //Do open form stuff
    }
    
    function promptForID()
    {
        openForm();
        //Do stuff that prompts for ID
    }
    
    function blankRecord()
    {
        openForm();
        //Do stuff that sets up a blank record
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-26
      • 1970-01-01
      • 2020-02-23
      • 2017-02-16
      • 1970-01-01
      • 2023-02-03
      相关资源
      最近更新 更多