获取错误 "operation is not allowed when the object is closed" 错误。寻找解决方案

Getting error "operation is not allowed when the object is closed" error. Looking for a solution

每次我 运行 我的 vba 文件,我得到 运行 时间错误 3704,对象关闭时不允许操作。正在尝试修复此错误。

连接类型和其他参数类型乱七八糟,但无济于事。该代码的目标是成为企业将数据输入 SQL 数据库的前端手段。企业不希望为此离开 excel。 vba 代码中调用的存储过程将数据输入到 SQL 数据库中。我已经验证存储过程在 SQL 中有效。 vba 代码的目标是调用存储过程并将数据导入 sql 数据库。我已经用一个测试数据库和一个变量完成了这项工作。现在我有 27 个。试图找到错误。

有 27 个变量,我没有包括所有的变量。我验证了他们都从 excel 中提取了正确的数据。我也让其他人验证参数是 SQL.

中的正确参数
Sub ImportProForma()

Dim rs As ADODB.Recordset
Dim cnSQL As ADODB.Connection
Dim sqlCommand As ADODB.Command, PKprm As Object

Dim PK As Integer
PK = Range("D3").Value

Sheets("UpdateProForma").Select
Set cnSQL = New ADODB.Connection
cnSQL.Open "Provider=SQLOLEDB; Integrated Security = sspi; Initial Catalog = [Database]; Data Source = [Server]"

Set sqlCommand = New ADODB.Command
sqlCommand.ActiveConnection = cnSQL
sqlCommand.CommandType = adCmdStoredProc

sqlCommand.CommandText = "ImportNewEntry"

Set PKprm = sqlCommand.CreateParameter("PrimaryKey", adInteger, adParamInput)
PKprm.Value = PK

sqlCommand.Parameters.Append PKprm
sqlCommand.Parameters("PrimaryKey") = PK


Set rs = New ADODB.Recordset
rs.CursorType = adOpenStatic
rs.LockType = adLockOptimistic
rs.Open sqlCommand

rs.Close
Set rs = Nothing

End Sub

该项目的最终目标是能够将数据导入 SQL 而无需休假 excel。

尽管没有数据导入 excel,我还是在代码中包含了记录集。在 Tim Williams(用户:478884)指出我不需要记录集之后。我删除了 rs 和其他不必要的代码。代码现在显示为:

Sub ImportProForma()

Dim rs As ADODB.Recordset
Dim cnSQL As ADODB.Connection
Dim sqlCommand As ADODB.Command, PKprm As Object

Dim PK As Integer
PK = Range("D3").Value

Sheets("UpdateProForma").Select
Set cnSQL = New ADODB.Connection
cnSQL.Open "Provider=SQLOLEDB; Integrated Security = sspi; Initial Catalog = [Database]; Data Source = [Server]"

Set sqlCommand = New ADODB.Command
sqlCommand.ActiveConnection = cnSQL
sqlCommand.CommandType = adCmdStoredProc
sqlCommand.CommandText = "ImportNewEntry"

Set PKprm = sqlCommand.CreateParameter("PrimaryKey", adInteger, adParamInput)
PKprm.Value = PK

sqlCommand.Parameters.Append PKprm
sqlCommand.Parameters("PrimaryKey") = PK

sqlCommand.Execute
Cells.Range("D5:D55").ClearContents

End Sub

我没有为 PK 清除 D3 中的数据,我有一个 vba 自动递增主键的函数。