我在数据表视图中有一个表单。我希望vba模拟相同的步骤,就好像用户向表单添加了一个新的寄存器(行)。用户添加新寄存器的步骤如下:
我试图将这些步骤翻译成vba:
1
If Not my_form.NewRecord Then
RunCommand acCmdRecordsGoToNew
End If
2
my_form.field_1 = value_1
my_form.field_2 = value_2
...
3
my_form.Requery
结果是:
选择了上一个(新)行。没关系。
将值添加到字段中,但星号不会转换为笔,并且不会添加新行(带星号)。坏了!
行被重新排序,因此新行(刚输入值的行)不会显示为最后一行。坏了!
我希望新行(带有值)显示为最后一行(就在带有星号的空行之前),就像用户输入了值一样。换句话说,我想完全模拟用户添加新行。
更新:我发现了原因:如果我们首先为复选框指定一个值(在为文本框指定值之前),则不会显示新行:
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"
...
难以置信,但确实如此。
答案 0 :(得分:0)
您使用的是什么版本的MS Access?这看起来很古老。这对我有用:
Dim frm As Form
Set frm = Forms!aForm
DoCmd.GoToRecord , , acNewRec
frm.aControl = ""
当然,这取决于您运行代码的位置,如果它在表单中,Me
就可以了。