我一直试图遍历数组,在同一连接的工作簿中打开多个记录集。
第一次迭代很好,但是在随后的迭代中,记录集建立在先前的记录集上。
我尝试删除数据数组,关闭记录集,设置新记录集,将记录集设置为空,甚至关闭连接并打开新记录。
它仍然是累积的。
Dim connection As New ADODB.connection
Dim rs As New ADODB.Recordset
strPath = "path"
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath & ";Extended Properties=""Excel 12.0;HDR=Yes;"";"
connection.Open strConn
Dim tarArr As Variant, tarElm As Variant, recsetElm as Variant
tarArr = Array("CW", "NW")
For Each tarElm In tarArr
If tarElm = "CW" Then
distroSht = "Capital Warfare"
ElseIf tarElm = "NW" Then
distroSht = "Northwest Pacific"
End If
strQuery = "SELECT Address FROM [" & distroSht & "$]"
Set rs = New ADODB.Recordset
rs.Open strQuery, connection
recset = rs.GetRows
For Each recsetElm In recset
mailTo = mailTo & recsetElm & "; "
Next recsetElm
Erase recset
rs.Close
Set rs = Nothing
Next tarElm
答案 0 :(得分:1)
只需在循环内的记录集上移动创建的内容,以便在每次迭代进行plac时,都会在循环结束时创建并删除记录集。
赞:
Dim connection As New ADODB.connection
Dim rs As ADODB.Recordset
strPath = "path"
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath & ";Extended Properties=""Excel 12.0;HDR=Yes;"";"
connection.Open strConn
Dim tarArr As Variant, tarElm As Variant, recsetElm as Variant
tarArr = Array("CW", "NW")
For Each tarElm In tarArr
If tarElm = "CW" Then
distroSht = "Capital Warfare"
ElseIf tarElm = "NW" Then
distroSht = "Northwest Pacific"
End If
strQuery = "SELECT Address FROM [" & distroSht & "$]"
Set rs = ADODB.Recordset
rs.Open strQuery, connection
recset = rs.GetRows
For Each recsetElm In recset
mailTo = mailTo & recsetElm & "; "
Next recsetElm
Erase recset
rs.Close
Set rs = Nothing
mailTo = vbNullString
Next tarElm