2015-03-13 93 views
0

我正在使用從IBM iSeries返回記錄集的Access 2010 VBA。我有以下循環來記錄追加到本地表:運行時錯誤91:對象變量或未設置塊變量

'Loop through recordset and place values 
    Do While rsti401.EOF = False 
Set rst401 = CurrentDb.OpenRecordset("tblLocal_SL401WK", dbOpenDynaset, dbSeeChanges) 
With rst401 
    .AddNew 
    .Fields("PC") = rsti401.Fields("PC") 
    .Fields("TIME") = rsti401.Fields("TIME") 
    .Fields("CONO") = rsti401.Fields("CONO") 
    .Fields("STYCOL") = rsti401.Fields("STYCOL") 
    .Fields("WHSE") = rsti401.Fields("WHSE") 
    .Fields("CUNO") = rsti401.Fields("CUNO") 
    .Fields("SIZE01") = rsti401.Fields("SIZE01") 
    .Fields("SIZE02") = rsti401.Fields("SIZE02") 
    .Fields("SIZE03") = rsti401.Fields("SIZE03") 
    .Fields("SIZE04") = rsti401.Fields("SIZE04") 
    .Fields("SIZE05") = rsti401.Fields("SIZE05") 
    .Fields("SIZE06") = rsti401.Fields("SIZE06") 
    .Fields("SIZE07") = rsti401.Fields("SIZE07") 
    .Fields("SIZE08") = rsti401.Fields("SIZE08") 
    .Fields("SIZE09") = rsti401.Fields("SIZE09") 
    .Fields("SIZE10") = rsti401.Fields("SIZE10") 
    .Fields("SIZE11") = rsti401.Fields("SIZE11") 
    .Fields("SIZE12") = rsti401.Fields("SIZE12") 
    .Fields("SIZE13") = rsti401.Fields("SIZE13") 
    .Fields("SIZE14") = rsti401.Fields("SIZE14") 
    .Fields("SIZE15") = rsti401.Fields("SIZE15") 
    .Fields("BQTY01") = rsti401.Fields("BQTY01") 
    .Fields("BQTY02") = rsti401.Fields("BQTY02") 
    .Fields("BQTY03") = rsti401.Fields("BQTY03") 
    .Fields("BQTY04") = rsti401.Fields("BQTY04") 
    .Fields("BQTY05") = rsti401.Fields("BQTY05") 
    .Fields("BQTY06") = rsti401.Fields("BQTY06") 
    .Fields("BQTY07") = rsti401.Fields("BQTY07") 
    .Fields("BQTY08") = rsti401.Fields("BQTY08") 
    .Fields("BQTY09") = rsti401.Fields("BQTY09") 
    .Fields("BQTY10") = rsti401.Fields("BQTY10") 
    .Fields("BQTY11") = rsti401.Fields("BQTY11") 
    .Fields("BQTY12") = rsti401.Fields("BQTY12") 
    .Fields("BQTY13") = rsti401.Fields("BQTY13") 
    .Fields("BQTY14") = rsti401.Fields("BQTY14") 
    .Fields("BQTY15") = rsti401.Fields("BQTY15") 
.Update 
End With 
rsti401.MoveNext 
Loop 


'close connections 
rsti401.Close 
rst401.Close 
IBM.Close 

Set IBM = Nothing 
Set rst401 = Nothing 
Set rsti401 = Nothing 
Set CMD = Nothing 

然而,每一個我運行它,我在下面的行停止時間:

rst401.Close 

有了錯誤「運行時錯誤91' 。我無法解決這個問題。我在開始時設置了first401,所以爲什麼我仍然會收到錯誤。

任何指針將是一個很大的幫助。

感謝,

邁克爾

+0

您是否在設置之前指定了Dim Rst1401作爲新的RecordSet? – 2015-03-13 11:19:40

+0

嘗試在調試模式下逐步瀏覽您的代碼,並觀察您的rst401變量如何演變([說明](http://www.cpearson.com/excel/DebuggingVBA.aspx))。如果這沒有幫助,那麼我建議你看看這個指導:[如何創建一個最小,完整和可驗證的示例](http://stackoverflow.com/help/mcve)。 – 2015-03-13 11:20:17

+0

我會嘗試使用數據庫變量而不是使用CurrentDb:Dim dB as Recordset Set dB = CurrentDb。或者將違規行移入With塊。 – AVG 2015-03-13 11:25:38

回答

1

你的問題是因爲rst401設置的Do While Loop裏面,您要關閉已經失去了它的範圍外循環的對象。建議您進行以下更改。

'Loop through recordset and place values 
Set rst401 = CurrentDb.OpenRecordset("tblLocal_SL401WK", dbOpenDynaset, dbSeeChanges) 

Do While rsti401.EOF = False   
    With rst401 
     .AddNew 
     .Fields("PC") = rsti401.Fields("PC") 
     .Fields("TIME") = rsti401.Fields("TIME") 
     .Fields("CONO") = rsti401.Fields("CONO") 
     .Fields("STYCOL") = rsti401.Fields("STYCOL") 
     .Fields("WHSE") = rsti401.Fields("WHSE") 
     .Fields("CUNO") = rsti401.Fields("CUNO") 
     .Fields("SIZE01") = rsti401.Fields("SIZE01") 
     .Fields("SIZE02") = rsti401.Fields("SIZE02") 
     .Fields("SIZE03") = rsti401.Fields("SIZE03") 
     .Fields("SIZE04") = rsti401.Fields("SIZE04") 
     .Fields("SIZE05") = rsti401.Fields("SIZE05") 
     .Fields("SIZE06") = rsti401.Fields("SIZE06") 
     .Fields("SIZE07") = rsti401.Fields("SIZE07") 
     .Fields("SIZE08") = rsti401.Fields("SIZE08") 
     .Fields("SIZE09") = rsti401.Fields("SIZE09") 
     .Fields("SIZE10") = rsti401.Fields("SIZE10") 
     .Fields("SIZE11") = rsti401.Fields("SIZE11") 
     .Fields("SIZE12") = rsti401.Fields("SIZE12") 
     .Fields("SIZE13") = rsti401.Fields("SIZE13") 
     .Fields("SIZE14") = rsti401.Fields("SIZE14") 
     .Fields("SIZE15") = rsti401.Fields("SIZE15") 
     .Fields("BQTY01") = rsti401.Fields("BQTY01") 
     .Fields("BQTY02") = rsti401.Fields("BQTY02") 
     .Fields("BQTY03") = rsti401.Fields("BQTY03") 
     .Fields("BQTY04") = rsti401.Fields("BQTY04") 
     .Fields("BQTY05") = rsti401.Fields("BQTY05") 
     .Fields("BQTY06") = rsti401.Fields("BQTY06") 
     .Fields("BQTY07") = rsti401.Fields("BQTY07") 
     .Fields("BQTY08") = rsti401.Fields("BQTY08") 
     .Fields("BQTY09") = rsti401.Fields("BQTY09") 
     .Fields("BQTY10") = rsti401.Fields("BQTY10") 
     .Fields("BQTY11") = rsti401.Fields("BQTY11") 
     .Fields("BQTY12") = rsti401.Fields("BQTY12") 
     .Fields("BQTY13") = rsti401.Fields("BQTY13") 
     .Fields("BQTY14") = rsti401.Fields("BQTY14") 
     .Fields("BQTY15") = rsti401.Fields("BQTY15") 
     .Update 
    End With 
    rsti401.MoveNext 
Loop 

'close connections 
rsti401.Close 
rst401.Close 
IBM.Close 

Set IBM = Nothing 
Set rst401 = Nothing 
Set rsti401 = Nothing 
Set CMD = Nothing 
+0

是的,你是對的!現在起作用了。謝謝。 – Michael 2015-03-13 13:04:10

+0

沒問題,不客氣! :) – PaulFrancis 2015-03-13 13:07:19

相關問題