2017-04-14 78 views
1

我寫了VBA代碼,它使用ADODB記錄集從Excel工作表中檢索數據以填充用戶表單。每次運行代碼時,工作表被替換爲新數據。ADO記錄集返回舊(陳舊)數據

就在幾個星期前,我開始有一個問題,即記錄集對象不會返回正確的數據,而是返回以前會話中使用的數據。甚至在關閉Excel文件並重新打開之後也會發生這種情況。

例如,我將運行數據集A的代碼,然後關閉Excel文件。我重新打開Excel文件,用數據集B替換工作表,然後運行代碼。它不會返回數據集B,而會返回數據集A.發生這種情況時,我確認工作表實際上包含數據集B,而不是A. 爲了提供更多背景信息,我相信當我從使用ACE連接字符串而不是JET。我被迫做了這個轉換,因爲我開始用JET連接字符串得到錯誤。我使用的連接字符串可以在下面找到。

我很感謝任何與此問題有關的反饋。如果需要更多信息,請告訴我。

strConnString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & mstrFile & ";Extended Properties=""Excel 12.0 Macro;HDR=YES;IMEX=1""" 
+0

有幾個問題。首先,這個VBA代碼駐留在哪裏?我假設它不在包含數據的同一個Excel文件中,在這種情況下,它並不重要。如果VBA代碼位於不同的文件/應用程序中,那麼包含數據的Excel實際上並不需要打開代碼才能工作。其次,你說你重新打開Excel,更改數據,然後再次運行代碼 - 在重新運行代碼之前,你是否保存更改的Excel? – Skippy

+0

VBA代碼駐留在啓用宏的Excel文件中,數據(在工作表中)也是如此。在重新運行代碼之前,不會保存Excel文件。 –

+0

VBA代碼和數據都在*相同* Excel文件中?那麼爲什麼你需要連接字符串呢?但是,如果您使用連接字符串,則不保存文件可能會導致您的問題。在編輯文件時,連接字符串將指向文件的原始未保存副本。在運行代碼之前保存文件,看看它是否有效。 – Skippy

回答

0

此問題已解決(感謝Skippy)。將新數據導入工作表後保存文件解決了問題。在不保存文件的情況下,連接指向包含陳舊數據的文件版本。