2015-03-13 90 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

相关问题