运行时错误3705,对象打开时不允许操作

时间:2016-02-01 05:55:14

标签: excel vba

我在添加行

后收到错误3705
[MTSU_Data].[Tool no]=" CInt(WsInput.Range("J" & c).value) & ";"

发生错误的突出显示行位于

.ActiveConnection = conn

完整代码

Dim conn As ADODB.Connection
Dim Accdata As ADODB.Recordset
Dim Accfield As ADODB.Field
Dim wsQueryR As Worksheet, wsFinal As Worksheet

Set wsFinal = Worksheets("Final")
Set conn = New ADODB.Connection
Set Accdata = New ADODB.Recordset

conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\wongki7\Desktop\MTSU Db.accdb;"
conn.Open
'G:\BusUnits\MTSU\MTSU\Mold Tool Set Up\MTSU  Reports\Shift Reports\MTSU Db.accdb;"
' On Error GoTo CloseConnection

  For c = 2 To WsInput.Range("J" & Rows.Count).End(xlUp).Row
    With Accdata
      .ActiveConnection = conn
      .Source = "SELECT * FROM [MTSU_Data] Where [MTSU_Data].[Date]>= #" _
            & Format(CDate(WsInput.Range("A2").value), "mm/dd/yyyy") & " # AND [MTSU_Data].[Date]<= #" _
            & Format(CDate(WsInput.Range("A3").value), "mm/dd/yyyy") & " # AND [MTSU_Data].[LT] = " _
            & CInt(WsInput.Range("M2").value) & " AND [MTSU_Data].[Tool no]=" _
            & CInt(WsInput.Range("J" & c).value) & ";"
      .LockType = adLockReadOnly
      '.CursorType = adOpenForwardOnly
      .Open
    End With
  Next
  Worksheets("Result").Select
  Sheets("Result").Range("a2").CopyFromRecordset Accdata
  Accdata.Close
  conn.Close

感谢任何帮助。谢谢你,祝你有个美好的一天。

3 个答案:

答案 0 :(得分:0)

你能否尝试移动

.ActiveConnection = conn 

到循环外面。显然完全符合条件..

Accdata.ActiveConnection = conn 

在我看来,你正试图为每次迭代建立连接,我认为只需要一次......也许。

答案 1 :(得分:0)

为了最适合您的代码,我尝试使用以下内容:

Sub SomeRoutine()

Dim conn As ADODB.Connection
Dim Accdata As ADODB.Recordset
Dim Accfield As ADODB.Field
Dim wsQueryR As Worksheet, wsFinal As Worksheet
Dim c As Long

Set wsFinal = Worksheets("Final")
Set conn = New ADODB.Connection
Set Accdata = New ADODB.Recordset

conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\wongki7\Desktop\MTSU Db.accdb;"
conn.Open
Accdata.ActiveConnection = conn
Accdata.LockType = adLockReadOnly

For c = 2 To WsInput.Range("J" & Rows.Count).End(xlUp).Row
    Call Accdata.Open("SELECT * FROM BLah Blah")
    Sheets("Result").Range("a2").CopyFromRecordset Accdata
    Accdata.Close
Next
conn.Close
End Sub

您可以查看构建SQL请求的方式,以构建查询以一次性获取数据,并使用CopyFromRecordset对Excel进行一次粘贴....但这是一个不同的问题。 / p>

答案 2 :(得分:0)

我之前犯过很多次的错误。分配对象时,需要使用Set。将行更改为

Set .ActiveConnection = conn

.Source.LockType是标量属性,因此他们不需要设置,但.Activeconnection可以。