运行到"rs.Open Sql, conn, 1, 1"处,说“对象变量或with块变量未设置” ?

Private Sub Command1_Click()
Call PutInExcel1("10")
End Sub

Sub PutInExcel1(i)
'==================================
Dim conn As New ADODB.Connection
Dim rs As ADODB.Recordset
FileName = "D:\database\db.mdb"
CnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FileName & ";Persist Security Info=False"
conn.Open CnStr
'==================================

Dim ExlApp As New Excel.Application
ExlFile = "D:\Database\test.xls"
ExlApp.Workbooks.Open (ExlFile)
ExlApp.Worksheets("blad1").Select
'==================================

Sql = "select a.* from list a where a.[chart no]='" & i & "' and a.[site-measurement]='1 - Depth'"
Print Sql
rs.Open Sql, conn, 1, 1
If rs(3) <> "missing" Then ExlApp.Cells(17, 3) = rs(3)
If rs(4) <> "missing" Then ExlApp.Cells(17, 6) = rs(4)
If rs(5) <> "missing" Then ExlApp.Cells(17, 9) = rs(5)
ExlApp.SaveWorkspace
ExlApp.Quit
rs.Close
conn.Close
End Sub

到底我做错什么了????

白猪掌柜的
浏览 167回答 3
3回答

忽然笑

你的rs只是定义了一个记录集,但并没有把任何记录集赋于它,所以才会出现这样的错误。你的程序最好增加二个自定义函数,把conn,Rs的加载与缷载单独出来。否则,你会发现程序运行越来越慢,内存占用越用越多。比如说:Dim conn As ADODB.ConnectionDim rs As ADODB.RecordsetDim ExlApp As Excel.Applicationpublic sub CrOBJ()set conn = new ADodb.connectionset rs = new adodb.recordsetset ExlApp = new Excel.Applicationend sub&nbsp;public sub killOBJ()set conn = nothingset rs = nothingset ExlApp = nothingend sub第一个函数可以在Form_load()中加载而后一个函数可以在Form_unload()中加载。这样做的好处就是打开页面就调用,关闭页面就缷载。可以减小内存占用!

交互式爱情

Dim rs As ADODB.Recordset改为:&nbsp;Dim rs As new ADODB.Recordset试试

潇湘沐

你的代码没有错误,如果总是出现“对象变量或with块变量未设置”错误,只有一个可能,就是你的 MSHFlexGrid 控件的问题。当用的是 MSFlexGrid 控件时,会出现你说的问题。
打开App,查看更多内容
随时随地看视频慕课网APP