КОД найден на просторах инета.
впоследствие найдены следы применения здест на сайте - Author: KL
Данный код использует листы в текущей книге, как таблицы с данными, которые можно обрабатывать при помощи SQL запроса.
Работает быстро, и не слишком сложный.
Если много запросов, то я переделывал в параметр сам SQL запрос.
Надо будет поменять название
Private Sub GenerateReportSQL(strSQL)
закомментировать 2 строки
Dim strSQL As String
strSQL = "SELECT * FROM [OLD$]"
-----------------------------------------------------------------------------
Private Sub GenerateReportSQL()
Dim ws As Worksheet
Dim qry As QueryTable
Dim strPath As String
Dim strName As String
Dim strCon As String
Dim strSQL As String
Dim strPosition As String
Dim strRng As String
Dim tm As Double
With ThisWorkbook
On Error Resume Next
Set ws = .Worksheets("Отчет")
On Error GoTo 0
If ws Is Nothing Then Set ws = .Worksheets.Add(after:=.Worksheets(.Worksheets.Count))
strName = .FullName
strPath = .Path
strRng = "A2:U"
strCon = "ODBC;DSN=Excel Files;" & _
"DBQ=" & strName & ";" & _
"DefaultDir=" & strPath & ";" & _
"DriverId=1046;" & _
"MaxBufferSize=2048;" & _
"Page Timeout=5;"
strSQL = "SELECT * FROM [OLD$]"
With ws
If Val(Application.Version) > 11 Then DeleteConnections_12
.Cells.Clear
.Name = "Отчет"
Set qry = .QueryTables.Add(strCon, .Range("A1"), strSQL)
With qry
.BackgroundQuery = False
.Refresh
.Delete
End With
End With
End With
End Sub
Private Sub DeleteConnections_12()
' This line won't work and wouldn't be necessary
' in the versions older than 2007
'*****************************************************************************
On Error Resume Next: ThisWorkbook.Connections(1).Delete: On Error GoTo 0
'*****************************************************************************
End Sub
---------------------------------------------------------------------------------
Теперь попробую описать нюансы.
Листы служат табличными источниками данным. Писать в запросе надо обязательно с $
Т.е. для объявления Листа с данными под названием "OLD" в SQL запросе надо писать [OLD$]
Первая строка в листе служит названием полей. Для объявления поля необходиомо писать имя столбца.
Например, поле называется "Название" на листе "OLD". в SQL пишем так [OLD$].Название
Еще ньюанс. Если вы хотите отбирать часть текста, то вместо * надо писать %
Например, необходимо чтобы в Название содержалось слово "оскв", в SQL надо писать like `%оскв%`
Да и еще, в SQL запросе под VBA, при выборе всякий условий, не пишут знак кавычки, пишите (апостраф вроде) `
Например WHERE [OLD$].Название = `Москва`
впоследствие найдены следы применения здест на сайте - Author: KL
Данный код использует листы в текущей книге, как таблицы с данными, которые можно обрабатывать при помощи SQL запроса.
Работает быстро, и не слишком сложный.
Если много запросов, то я переделывал в параметр сам SQL запрос.
Надо будет поменять название
Private Sub GenerateReportSQL(strSQL)
закомментировать 2 строки
Dim strSQL As String
strSQL = "SELECT * FROM [OLD$]"
-----------------------------------------------------------------------------
Private Sub GenerateReportSQL()
Dim ws As Worksheet
Dim qry As QueryTable
Dim strPath As String
Dim strName As String
Dim strCon As String
Dim strSQL As String
Dim strPosition As String
Dim strRng As String
Dim tm As Double
With ThisWorkbook
On Error Resume Next
Set ws = .Worksheets("Отчет")
On Error GoTo 0
If ws Is Nothing Then Set ws = .Worksheets.Add(after:=.Worksheets(.Worksheets.Count))
strName = .FullName
strPath = .Path
strRng = "A2:U"
strCon = "ODBC;DSN=Excel Files;" & _
"DBQ=" & strName & ";" & _
"DefaultDir=" & strPath & ";" & _
"DriverId=1046;" & _
"MaxBufferSize=2048;" & _
"Page Timeout=5;"
strSQL = "SELECT * FROM [OLD$]"
With ws
If Val(Application.Version) > 11 Then DeleteConnections_12
.Cells.Clear
.Name = "Отчет"
Set qry = .QueryTables.Add(strCon, .Range("A1"), strSQL)
With qry
.BackgroundQuery = False
.Refresh
.Delete
End With
End With
End With
End Sub
Private Sub DeleteConnections_12()
' This line won't work and wouldn't be necessary
' in the versions older than 2007
'*****************************************************************************
On Error Resume Next: ThisWorkbook.Connections(1).Delete: On Error GoTo 0
'*****************************************************************************
End Sub
---------------------------------------------------------------------------------
Теперь попробую описать нюансы.
Листы служат табличными источниками данным. Писать в запросе надо обязательно с $
Т.е. для объявления Листа с данными под названием "OLD" в SQL запросе надо писать [OLD$]
Первая строка в листе служит названием полей. Для объявления поля необходиомо писать имя столбца.
Например, поле называется "Название" на листе "OLD". в SQL пишем так [OLD$].Название
Еще ньюанс. Если вы хотите отбирать часть текста, то вместо * надо писать %
Например, необходимо чтобы в Название содержалось слово "оскв", в SQL надо писать like `%оскв%`
Да и еще, в SQL запросе под VBA, при выборе всякий условий, не пишут знак кавычки, пишите (апостраф вроде) `
Например WHERE [OLD$].Название = `Москва`