В общем надоело мне клепать Строки подключения и т.д
наваял функцию
Вот хочу совета услышать, может чего добавить? Что посоветуете?
ну и проверка
наваял функциюВот хочу совета услышать, может чего добавить? Что посоветуете?
Код Выделить
Public Function ADO_R_Dmitry(ByVal strSql$, ByVal FilePath$, ByVal OutputRange As Range, ByVal OfisVersion As Long, _
ByVal FieldsName As Boolean, ByVal OutputFieldsName As Boolean)
Dim sCon As String, FieldName As String
'Dim cn As ADODB.Connection, rs As ADODB.Recordset 'Для раннего связывания
Dim rs As Object, cn As Object
Set rs = CreateObject("ADODB.Recordset") 'Для позднего связывания
Set cn = CreateObject("ADODB.Connection") 'Для позднего связывания
'Set cn = New ADODB.Connection 'Для раннего связывания
'Set rs = New ADODB.Recordset 'Для раннего связывания
If FieldsName Then FieldName = "Yes" Else FieldName = "No"
Select Case OfisVersion
Case 2003
sCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FilePath _
& ";Extended Properties=""Excel 8.0;HDR=" & FieldName & ";IMEX=1"";"
Case 2007
sCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & FilePath _
& ";Extended Properties=""Excel 12.0;HDR=" & FieldName & ";IMEX=1"";"
End Select
cn.Open sCon
If Not cn.State = 1 Then Exit Function
Set rs = cn.Execute(strSql)
'rs.Open strSql, cn, adOpenKeyset, adLockPessimistic 'Для раннего связывания
If Not OutputFieldsName Then FieldsName = False
If OutputFieldsName Then
For i = 0 To rs.Fields.Count - 1
OutputRange.Offset(0, i) = rs.Fields(i).Name
Next
Set OutputRange = OutputRange.Offset(1, 0)
End If
OutputRange.CopyFromRecordset rs
rs.Close: cn.Close
Set cn = Nothing: Set rs = Nothing
End Functionну и проверка
Код Выделить
Sub Test()
'пример использования
strSql2 = "SELECT * FROM [Лист1$]"
Call ADO_R_Dmitry(strSql2, ThisWorkbook.FullName, Sheets(2).[a1], 2003, False, True)
End Sub