#ms-access #vba #ms-access-2010
#ms-access #vba #ms-access-2010
Вопрос:
Ошибка времени выполнения ‘3190’ Определено слишком много полей
Я получаю эту ошибку, когда нажимаю на кнопку, которая вызывает запросы в DoCmd.TransferSpreadsheet:
'------------------------------------------------------------
' Creates the excel file in the path passed to it
' Returns the path of the file including the file name and extension
'------------------------------------------------------------
Function CreateExcelFile(Path As String) As String
Dim outputFileName As String
outputFileName = Path amp; "SummaryTemplate.xlsx"
Dim Queries(1 To 4) As String
Queries(1) = "qryProcessAuditScores" 'Audit scores
Queries(2) = "qryProcessAuditStations" 'Audit Stations
Queries(3) = "qryProcessNCs" 'Number of NC's
Queries(4) = "qryProcessAuditCount" 'number of audits from the year
Dim qry
For Each qry In Queries
DoCmd.TransferSpreadsheet _
acExport, _
acSpreadsheetTypeExcel12, _
qry, _
outputFileName, _
True
Next
CreateExcelFile = outputFileName 'return the full path
End Function
Когда я запускаю запросы вручную в Access, я не получаю такой ошибки. Я безуспешно пытался сжать и восстановить базу данных. Есть еще идеи?
Спасибо
Комментарии:
1. Попробуйте использовать
for qry = 1 to 4
иQueries(qry)
?2. В качестве альтернативы, можно поставить точку останова в строке docmd.transferspreadsheet и проверить значение
qry
3. Я попробовал это, чтобы убедиться, но это проблема с циклом. Это, скорее всего, проблема с вызовом или запросом, код присутствует как ссылка на мой метод, а не потому, что я в нем не уверен. Строки присутствовали и передавались. Единственное, в чем я не совсем уверен, это DoCmd. TransferSpreadsheet но я просмотрел это несколько раз. Спасибо за мысль, но это не так.
4. У меня такое чувство, что это проблема с рабочей книгой Excel, а не с запросами, хотя я не знаю, как скалярные массивы поддерживают для … каждого. Может быть, файл уже существует, потому что каждый запрос выводится в один и тот же файл? Возможно, он не знает, как обработать перезапись, и вместо этого выдает ошибку. Даже если нет, в какой диапазон записывается каждый запрос? Я думаю, что без определенного диапазона он всегда будет первым в коллекции листов. Я думаю, вам нужно хорошенько подумать об обработке файлов и о том, где данные окажутся в этих книгах
5. Действительно раздражает то, что это работало в течение дня или двух, прежде чем появилась ошибка. Это сработало с существующим там файлом, он добавлял каждый результат запроса на новый лист в книге, названный в честь запроса. Каждая страница была просто от A1 вниз, занимая все необходимые ячейки (всегда меньше 10 x 10), и это работало прекрасно. Также вы не можете определить диапазон для экспорта, только для импорта.
Ответ №1:
В итоге я выполнил команды sql для помещения запросов в таблицы, запустил TransferSpreadsheet с этими таблицами, а затем выполнил команды sql для удаления таблиц.