Ниже приведен пример использования процедуры для чтения данных из входных файлов Excel, сохраненных в папке.Запрос SQl имеет операции соединения из нескольких таблиц (листов), которые являются частью reportWorkbook .После успешного выполнения этой процедуры для некоторых файлов на каком-то этапе выдается ошибка '[Microsoft] [ODBC Excel Driver] Слишком мало параметров.Ожидается 11. ' для следующего входного файла.
Sub RunQueryOnInputFiles ()
Dim fldr As Folder
Dim fil As File
Dim oConn As ADODB.Connection
Dim oRs As ADODB.Recordset
Dim tmpWkb As Workbook
Dim reportWorkbook As Workbook
Dim sSql As String
Set reportWorkbook = Workbooks.Add
reportWorkbook.Save tmpFilePath
'Loop through all files in input folder
For Each fil In fldr.Files
Set tmpWkb = Workbooks.Open(fil.Path)
tmpWkb.Sheets(1).Range("A1").CurrentRegion.Copy
reportWorkbook.Sheets("TmpSheet").Range("A1").Paste xlPasteValues
'Paste input data
tmpWkb.Close SaveChanges:=False
Set oConn = OpenConnection(reportWorkbook.FullName)
sSql = GenrateSQL("SOME QUERY FROM SHEET [TmpSheet$]")
'Genrate SQL query from [TmpSheet$]`
Set oRs = GetRecordset(sSql, oConn)
reportWorkbook.Sheets("XYZ").Range("A1").CopyFromRecordset oRs
CloseConnection oConn
Next fils
End Sub
Я отлаживаю проблему отдельно, используя описанную ниже процедуру
Sub testing()
Dim sSql As String
Dim x As ADODB.Connection
Dim r As Object
Dim fl As Object
sSql = "SELECT * FROM [TmpSheet$A1:U4]"
'considering reportWorkbook is in scope it is same workbook
Set x = OpenConnection(reportWorkbook.FullName)
GetRecordset sSql, x
Set r = GetRecordset(sSql, x)
For Each fl In r.Fields
Debug.Print fl.Name
Next
End Sub
Здесь fl.Name возвращает имена, принадлежащие предыдущемуфайл, который уже обработан и данные на TmpSheet уже перезаписаны.Выполнение той же процедуры test () через несколько минут показывает правильные поля, доступные в Tmpsheet.
Кажется, что соединение не может быть обновлено.Пожалуйста, предложите какой-нибудь метод, который может принудительно обновлять соединение во время выполнения.