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

Run-time error 91: Object variable or With block variable not set

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

'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

错误 'Run-time error 91'。我搞不定。我一开始就设置了rst401,怎么还是报错

任何指点都会很有帮助。

谢谢,

迈克尔

您遇到的问题是因为 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