2015-04-29 25 views
1

我有一個子表單顯示一個數據集,最多包含200行,最多包含35列。當用戶選擇一個單元格時,會啓用部分UI以允許他們添加/編輯記錄,隨後子表單需要刷新,以便用戶可以看到由AfterUpdate事件觸發的更改的效果。重新選擇查詢中的Access子表單中的活動單元格

我的問題是子窗體被刷新時,通過調用Requery,重點轉移到子窗體的左上角,這意味着不僅可以在用戶無法看到自己的變化的影響,但他們有也失去了他們的地位。

我已設法通過捕獲和設置Form.Recordset.AbsolutePosition屬性來重新選擇當前記錄的子表單,但無法找到任何方法將焦點設置到用戶以前的列。

我目前的代碼是:

Private Sub Form_AfterUpdate() 

    Dim lngCurrentPos As Long 

    With Form_frmMain.subfrm_Results_Review 
     lngCurrentPos = .Form.Recordset.AbsolutePosition 
     .Requery 
     .Form.Recordset.AbsolutePosition = lngCurrentPos 
    End With 

End Sub 

但反正是有設置焦點返回到某個特定的細胞?看起來應該有辦法,因爲這一定是一個常見問題?

+0

您可以使用書籤獲取當前位置並進行刷新並重新設置書籤。 –

+0

您能否提供一個如何工作的例子?我已經嘗試在調用'Requery'之前將'.Form.Bookmark'存儲在一個變體中,但是當我嘗試再次設置它時,我得到'無效書籤'錯誤 – CrazyHorse

+0

我假設你的意思是「Form」,無論你身在何處在你的問題中寫了「報告」,因爲Access中的報告根本不可編輯。 - 請編輯該問題,將其正確編入索引以進行搜索。 – PhilS

回答

2

通過如下擴展VBA代碼,可以將焦點設置爲之前選擇的窗體控件。

Private Sub Form_AfterUpdate() 

    Dim lngCurrentPos As Long 
    Dim strControlName as String 

    With Form_frmMain.subfrm_Results_Review 
     strControlName = .Form.ActiveControl.Name 
     lngCurrentPos = .Form.Recordset.AbsolutePosition 
     .Requery 
     .Form.Recordset.AbsolutePosition = lngCurrentPos 
     .Form.Controls(strControlName).SetFocus 
    End With 

End Sub 
+0

這正是我正在尋找。非常感謝您的幫助 – CrazyHorse