Ms access Access VBA:如何模拟用户添加行

Ms access Access VBA:如何模拟用户添加行,ms-access,row,ms-access-2010,add,simulation,Ms Access,Row,Ms Access 2010,Add,Simulation,我在数据表视图中有一个表单。我希望vba模拟相同的步骤,就像用户向表单中添加了新的寄存器(行)一样。用户添加新寄存器的步骤包括: 单击最后一行(空)的字段(左边有星号的行) 键入一些字符。重要提示:此步骤将左星号转换为画笔,并在正在编辑的行下方显示一个新行(带星号) 单击其他行以保存新行 我已尝试将这些步骤转换为vba: 一, 二, 三, 结果是: 最后(新)行被选中。没关系 值会添加到字段中,但星号不会转换为画笔,也不会添加新行(带星号)。糟糕 行被重新排序,因此新行(刚输入值的行)不会显示为

我在数据表视图中有一个表单。我希望vba模拟相同的步骤,就像用户向表单中添加了新的寄存器(行)一样。用户添加新寄存器的步骤包括:

  • 单击最后一行(空)的字段(左边有星号的行)
  • 键入一些字符。重要提示:此步骤将左星号转换为画笔,并在正在编辑的行下方显示一个新行(带星号)
  • 单击其他行以保存新行
  • 我已尝试将这些步骤转换为vba:

    一,

    二,

    三,

    结果是:

  • 最后(新)行被选中。没关系

  • 值会添加到字段中,但星号不会转换为画笔,也不会添加新行(带星号)。糟糕

  • 行被重新排序,因此新行(刚输入值的行)不会显示为最后一行。糟糕

  • 我希望新行(带值)显示为最后一行(就在带星号的空行之前),就好像用户输入了值一样。换句话说,我想完全模拟用户添加新行的过程


    更新:我发现了原因:如果我们先给复选框赋值(在给文本框赋值之前),那么新行不会出现:

    If Not my_form.NewRecord Then           ' go to new (empty) row (if not already on it)
        RunCommand acCmdRecordsGoToNew
    End If
    
    my_form.my_checkbox.Value = 1           ' if we first assign a value to a checkbox, then no new row appears under our row
    my_form.my_textbox_1 = "aa"             ' no new row appears
    my_form.my_textbox_2 = "bb"             ' no new row appears
    ...
    
    但是,如果我们首先为文本框赋值,则会出现一个新行:

    If Not my_form.NewRecord Then           ' go to new (empty) row (if not already on it)
        RunCommand acCmdRecordsGoToNew
    End If
    
    my_form.my_textbox_1 = "aa"             ' if we first assign a value to a textbox, then a new row appears under our row
    my_form.my_checkbox.Value = 1    
    my_form.my_textbox_2 = "bb"
    ...
    

    难以置信,但确实如此。

    您使用的是什么版本的MS Access?那看起来很旧。这对我很有用:

    Dim frm As Form
    Set frm = Forms!aForm
    
    DoCmd.GoToRecord , , acNewRec
    frm.aControl = ""
    

    当然,这取决于您在哪里运行代码,如果它是表单本身,
    Me
    就可以了

    我正在使用Access 2010(您可以在标签中看到它)。正如我在更新中所评论的,原因是我在设置文本框之前设置了一个复选框。这似乎是MS Access中的一个错误-我遇到了完全相同的问题。
    If Not my_form.NewRecord Then           ' go to new (empty) row (if not already on it)
        RunCommand acCmdRecordsGoToNew
    End If
    
    my_form.my_checkbox.Value = 1           ' if we first assign a value to a checkbox, then no new row appears under our row
    my_form.my_textbox_1 = "aa"             ' no new row appears
    my_form.my_textbox_2 = "bb"             ' no new row appears
    ...
    
    If Not my_form.NewRecord Then           ' go to new (empty) row (if not already on it)
        RunCommand acCmdRecordsGoToNew
    End If
    
    my_form.my_textbox_1 = "aa"             ' if we first assign a value to a textbox, then a new row appears under our row
    my_form.my_checkbox.Value = 1    
    my_form.my_textbox_2 = "bb"
    ...
    
    Dim frm As Form
    Set frm = Forms!aForm
    
    DoCmd.GoToRecord , , acNewRec
    frm.aControl = ""