2014-03-05 38 views
1

我在數據表視圖中有一個表單。我希望vba模擬相同的步驟,就好像用戶在表單中添加了一個新的寄存器(行)一樣。用戶添加新寄存器的步驟如下:訪問VBA:如何模擬用戶行添加

  1. 單擊最後一個(空白)行(左邊有一個帶星號的行)的一個字段。
  2. 鍵入一些字符。重要提示:該步驟將左側的星號轉換爲筆,並在正在編輯的行下方出現一個新行(帶星號)。
  3. 單擊其他行以保存新行。

我曾嘗試這些步驟轉化爲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 

其結果是:

  1. 最後(新)行被選中。那沒問題。

  2. 將值添加到字段中,但不將星號轉換爲筆,並且不添加新行(帶星號)。壞!

  3. 行被重新排序,所以新行(剛剛輸入值的行)不會顯示爲最後一行。壞!

我希望新的行(帶值)顯示爲最後一個(只是有一個星號empy前行),因爲如果用戶已輸入的值。換句話說,我想完全模擬用戶對新行的追求。


更新:我發現了原因:如果我們ASIGN值的複選框第一(asigning值文本框之前),則新行不會出現:

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 asign 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 asign 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

似乎是MS Access中的一個錯誤 - 我碰到了完全相同的問題。 –

回答

0

你使用的是什麼版本的MS Access?這看起來很古老。這個工作對我來說:

Dim frm As Form 
Set frm = Forms!aForm 

DoCmd.GoToRecord , , acNewRec 
frm.aControl = "" 

當然,這取決於你正在運行的代碼,如果是在窗體本身,Me將被罰款。

+0

我使用Access 2010(您可以在標籤中看到它)。正如我在更新中評論的,原因是我在設置文本框之前設置了一個複選框。 – freesoft