Итак, вначале было слово:
Как оказалось, это все хорошо и работает, но только если у вас не 64-битный офис
В 64 битном офисе же провайдер Jet.OLEDB следует заменить на ACE.OLEDB.12.0, и казалось бы все, многим этого достаточно. Мне как всегда повезло быть срежи немногих.
Код |
---|
Dim rstDAO As Object Dim strSQL01 As String, strSQL As String Dim sCon$ Dim cn As Object ' As ADODB.Connection Dim rs1 As Object ' As ADODB.Recordset Dim rs31 As Object ' As ADODB.Recordset Set cn = CreateObject("ADODB.Connection") ' as New ADODB.Connection 'Dim cn As New ADODB.Connection Set rstDAO = CreateObject("ADODB.Recordset") ' as New ADODB.Recordset Set rs1 = CreateObject("ADODB.Recordset") Set rs31 = CreateObject("ADODB.Recordset") With Application .ScreenUpdating = False End With sCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.FullName _ & ";Extended Properties=""Excel 8.0;IMEX=1;HDR=No"";" cn.Open sCon If Not cn.State = 1 Then Exit Function 'save current sheet name strSQL = "[" & ActiveSheet.Name & "$]" strSQL01 = "Select DISTINCT F1 from " & strSQL & "" rstDAO.Open strSQL01, cn |
Как оказалось, это все хорошо и работает, но только если у вас не 64-битный офис
В 64 битном офисе же провайдер Jet.OLEDB следует заменить на ACE.OLEDB.12.0, и казалось бы все, многим этого достаточно. Мне как всегда повезло быть срежи немногих.
- Вариант 1 - ACE.OLEDB.12.0
Заменяем sCon:Код sCon = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & ThisWorkbook.FullName _ & ";Extended Properties=""Excel 12.0;HDR=No"";"
В таком раскладе перестает работать strSQL01 = "Select DISTINCT F1 from " & strSQL & "". Если добавлять скобки или извращаться - пишет "слишком много параметров, ожидаю лишь 1"
- Вариант 2 - MSDASQL
Заменяем sCon:Код sCon = "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & ThisWorkbook.FullName & "; HDR=No"";"
В таком раскладе колличество записей в выборке = 0, хотя на литсте записи явно есть
- Вариант 3 - Через ДРАЙВЕР
Заменяем sCon:Код sCon = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" & ThisWorkbook.FullName & ";"
тоже нет записей
Мы в Екселе не работаем, мы в нём живём!