运行时错误91:对象变量或未设置块变量

时间:2015-03-13 11:11:14

标签: vba ms-access

我正在使用从IBM iSeries返回记录集的Access 2010 VBA。我有以下循环将记录集附加到本地表:

'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'。我无法解决这个问题。我在开始时设置了rst401,为什么我仍然会收到错误。

任何指针都会有很大的帮助。

谢谢,

迈克尔

1 个答案:

答案 0 :(得分:1)

您遇到的问题是因为rst401设置在Do While Loop内,并且您正在尝试关闭在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