Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Опять не может скопировать в Excel
 
 автор: Scorpi   (17.07.2008 в 07:24)   личное сообщение
49 Кб.
 
 

Есть кнопочка для копирования Excel выбранных данных:
Dim xlApp As Object
Dim xlBook As Object
Dim sql As String
Dim RecSet As DAO.Recordset

Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Add("\\Main\common\...\sh_sp.xlt")
usl = sql_usl()
sql = "SELECT kod_poz, numb_pp, kod, numb_ch, name_m, oboz, ei, kolvo, post, prim, cherteg, name_ch, dat_d, numb_izm FROM specific where " & usl & " and priz=1 order by cherteg "
Set RecSet = CurrentDb.OpenRecordset(sql, dbOpenSnapshot)
Me!Поле20.Value = sql
xlBook.Worksheets(1).Range("A2").CopyFromRecordset RecSet
xlBook.SaveAs FileName:="\\Main\common\...\sh_sp1.xls", FileFormat:=xlNormal _
, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
xlApp.Visible = True
RecSet.Close: Set RecSet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing

sql_usl() - процедурка проверяет списки и составляет условие для выборки. Зарос формируется правильно. Для большей части данных работает, а вот в одном месте выдал ошибку: "Run-time '-2147467259 (80004005) Method 'CopyFromRecirdset' of object 'Range' failed'", когда для объекта Список RowSource приравниваю к формируемому sql, то в списке отображается все правильно, а вот копировать не хочет и это только при одном наборе условий, больше не сталкивалась. Проверяла данные внешне ничем не отллличаются от тех, для которых копирование проходит хорошо.
Прикрепила кусочек базы, для всех хорошо работает кроме Подобъекта "011".

  Ответить  
 
 автор: Scorpi   (17.07.2008 в 08:15)   личное сообщение
21 Кб.
 
 

шаблон в который загружаются данные

  Ответить  
 
 автор: Анатолий (Киев)   (17.07.2008 в 10:33)   личное сообщение
 
 

Ну и что надо увидеть в этом шаблоне? Пустой файл с заголовком таблицы.
Участвуют ли в запросе МЕМО поля, или вычисляемые поля, способные возвращать более 256 символов? Сколько записей возврашает запрос, дающий ошибку? А сколько остальные (работающие)?
Попробуйте сократить кол-во полей. Если заработает - добавлять по очереди. Возможно виновато какое-то поле, тогда проанализируйте данные в нем.

  Ответить  
 
 автор: Scorpi   (17.07.2008 в 11:50)   личное сообщение
 
 

Есть Memo поле, возвращающее больше 256 символов, в работающих вариантов записей возвращается намного больше чем в неработающем, буду проверять по полям, спасибо.
Да, когда убрала поле Memo, то все отработало. Получается access не может нормально передавать длинные поля в Excel? Можно это как-то побороть? Просто это поле одно из важных ((

  Ответить  
 
 автор: Кабан   (17.07.2008 в 12:29)   личное сообщение
 
 

аксесс все нормально передает :)
просто во всем д.б. мера
в МЕМО поле можно засунуть столько данных, что эксель просто не в состоянии будет их отобразить.
попробуйте сделать left(ПолеМемо,255)

  Ответить  
 
 автор: Scorpi   (21.07.2008 в 05:32)   личное сообщение
 
 

первоначально закачка происходила из Excel. Соответственно те данные которые в базе, корректно отбражались в Excel, а обрезать их нельзя, т.к по этому полю происходит сравнение при дальнейшей обработке. В других случаях даже с длиной больше 255 нормально передавалось. В общем еще смотрю варианты из-за чего в одном случае работает, в другом нет.

  Ответить  
 
 автор: Анатолий (Киев)   (17.07.2008 в 15:16)   личное сообщение
 
 

CopyFromRecordset позволяет скопировать указанное кол-во записей, а также полей.
Попробуйте копировати порциями:
With xlBook.Worksheets(1).Range("A2")
.CopyFromRecordset RecSet, 10
.CopyFromRecordset RecSet, 10
...
End With

Другой вариант - сделать МЕМО поле последним в RecSet (например - 10-м), если обычный вызов метода вылетает с ошибкой - выполнить его снова, но ограничив количество полей:
.CopyFromRecordset RecSet, , 9
Затем вернуться в начало RecSet и в цикле всавить значения из МЕМО прямо в ячейки.

  Ответить  
 
 автор: Scorpi   (21.07.2008 в 07:08)   личное сообщение
 
 

Спасибо за совет, нашла ошибку в данных. Не совсем понятно как происходило копирование, но ошибка была в самимх данных. После исправления, все заработало!

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList