为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

白猪掌柜的 2023-04-19 18:15:09
Private Sub Command1_Click()Call PutInExcel1("10")End SubSub PutInExcel1(i)'==================================Dim conn As New ADODB.ConnectionDim rs As ADODB.RecordsetFileName = "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.ApplicationExlFile = "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 Sqlrs.Open Sql, conn, 1, 1If 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.SaveWorkspaceExlApp.Quitrs.Closeconn.CloseEnd Sub到底我做错什么了????
查看完整描述

3 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

你的rs只是定义了一个记录集,但并没有把任何记录集赋于它,所以才会出现这样的错误。
你的程序最好增加二个自定义函数,把conn,Rs的加载与缷载单独出来。否则,你会发现程序运行越来越慢,内存占用越用越多。
比如说:
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim ExlApp As Excel.Application

public sub CrOBJ()
set conn = new ADodb.connection
set rs = new adodb.recordset
set ExlApp = new Excel.Application
end sub 
public sub killOBJ()
set conn = nothing
set rs = nothing
set ExlApp = nothing
end sub
第一个函数可以在Form_load()中加载而后一个函数可以在Form_unload()中加载。这样做的好处就是打开页面就调用,关闭页面就缷载。可以减小内存占用!


查看完整回答
反对 回复 2023-04-23
?
交互式爱情

TA贡献1712条经验 获得超3个赞

Dim rs As ADODB.Recordset
改为: 
Dim rs As new ADODB.Recordset
试试

查看完整回答
反对 回复 2023-04-23
?
潇湘沐

TA贡献1816条经验 获得超6个赞

你的代码没有错误,如果总是出现“对象变量或with块变量未设置”错误,只有一个可能,就是你的 MSHFlexGrid 控件的问题。当用的是 MSFlexGrid 控件时,会出现你说的问题。

查看完整回答
反对 回复 2023-04-23
  • 3 回答
  • 0 关注
  • 226 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信