Ms access Access VBA:如何模拟用户添加行
我在数据表视图中有一个表单。我希望vba模拟相同的步骤,就像用户向表单中添加了新的寄存器(行)一样。用户添加新寄存器的步骤包括:Ms access Access VBA:如何模拟用户添加行,ms-access,row,ms-access-2010,add,simulation,Ms Access,Row,Ms Access 2010,Add,Simulation,我在数据表视图中有一个表单。我希望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 = ""