Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Снова запись в Ексел  [new]
ИВП
Member

Откуда:
Сообщений: 225
Всем привет.
Простая задача: вывести часть данных из Аксеса в Екселевский файл 1.xls
В начале модуля формы описаны переменные, на кнопку toEXCEL повешен такой код.

Option Compare Database 'код в наале модуля
Option Explicit
    Dim xlApp As Excel.Application
    Dim xlBook As Excel.Workbook
    Dim xlSheet As Excel.Worksheet
    Dim xlSheet0 As Excel.Worksheet

Private Sub toEXCEL_Click() 'код на кнопке
   Dim fileXLT As String
   fileXLT = CurrentProject.Path & "\1.xls"
   Set xlApp = CreateObject("Excel.Application")
   Set xlBook = xlApp.Workbooks.Open(fileXLT)
   Set xlSheet = xlBook.Sheets("Рас1")
   Set xlSheet0 = xlBook.Sheets("РасЭ")
   xlApp.Visible = True
   xlApp.DisplayAlerts = True

   xlSheet0.Select  'Лист РасЭ
   Columns("C:C").Select   'Здесь возникает ошибка при повторном вызове подпрограммы.

'ЗДЕСЬ - производятся ДЕЙСТВИЯ В ФАЙЛЕ ЕКСЕЛЯ 

Set xlSheet = Nothing
Set xlSheet0 = Nothing
Set xlBook = Nothing
xlApp.Quit
Set xlApp = Nothing
End Sub

При первом нажатии кнопки все работает прекрасно - данные перебрасываются в файл и форматируются.

При повторном нажатии кнопки все ломается на строке
Columns("C:C").Select   'Здесь возникает ошибка при повторном вызове подпрограммы.
11 июл 19, 19:31    [21925220]     Ответить | Цитировать Сообщить модератору
 Re: Снова запись в Ексел  [new]
ИВП
Member

Откуда:
Сообщений: 225
ИВП,

Возникает ошибка

Run-time error '1004'
Method 'Columns' of object '_Global' failed

После выбора кнопки End все опять идет хорошо.

Чего не хватает в конце процедуры?
11 июл 19, 19:32    [21925222]     Ответить | Цитировать Сообщить модератору
 Re: Снова запись в Ексел  [new]
Predeclared
Member

Откуда: And God I know I'm one
Сообщений: 908
Откуда Access знать, что такое Columns?
11 июл 19, 19:36    [21925226]     Ответить | Цитировать Сообщить модератору
 Re: Снова запись в Ексел  [new]
ИВП
Member

Откуда:
Сообщений: 225
Predeclared,

Там же открывается Екселевский файл. И первый раз все работает.
11 июл 19, 19:50    [21925232]     Ответить | Цитировать Сообщить модератору
 Re: Снова запись в Ексел  [new]
Сергей Лалов
Member

Откуда: localhost SPB
Сообщений: 1439
ИВП
Columns("C:C").Select 'Здесь возникает ошибка при повторном вызове подпрограммы.

[/src]


Может так?:

 Range("C:C").Select


Попробуйте.


Column это несколько другой объект, у него часть свойств вообще к Excel не относиться.
12 июл 19, 00:34    [21925350]     Ответить | Цитировать Сообщить модератору
 Re: Снова запись в Ексел  [new]
booby
Member

Откуда:
Сообщений: 1683
ИВП
Predeclared,

Там же открывается Екселевский файл. И первый раз все работает.

Конечно это это печально, что первый раз все работает,
поскольку даёт вам основание настаивать на чём-то своем.
Для вас было бы несомненно лучше, чтобы не работало вообще ни разу,
поскольку не оставляло бы сомнений в наличии ошибки.

Но может быть всё таки хотя бы попробовать прислушаться к тому что говорит Predeclared?

Это не больно. А проверить наличие ошибки легко - после вашего первого раза, на котором все работает, почти наверно, после
Set xlApp = Nothing
End Sub


Excel остается висящим в памяти. Проверьте в диспетчере задач.
12 июл 19, 00:52    [21925353]     Ответить | Цитировать Сообщить модератору
 Re: Снова запись в Ексел  [new]
MrShin
Member

Откуда:
Сообщений: 1277
С функциями Экселя из Акцесса можно работать ТОЛЬКО через переменные с объектами Экселя - через объекты xl* в вашем случае. Любое выражение, которое не содержит такую переменную работать не будет. Т.е. в ваем случае это будет
xlSheet0.Columns

И старайтесь не использовать Select и Activate без реальной надобности. Я понимаю, что макрорекордер так пишет, но это место потенциальных ошибок, котрые очень трудно выявить. Заменяйте все на переменные с объектами.
12 июл 19, 04:08    [21925372]     Ответить | Цитировать Сообщить модератору
 Re: Снова запись в Ексел  [new]
MrShin
Member

Откуда:
Сообщений: 1277
booby
Excel остается висящим в памяти.

Почему остается? Там же есть
xlApp.Quit

перед ним.
12 июл 19, 04:10    [21925373]     Ответить | Цитировать Сообщить модератору
 Re: Снова запись в Ексел  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 4384
MrShin
Почему остается?
потому-что поднимаются другие экземпляры Excel.
12 июл 19, 05:01    [21925376]     Ответить | Цитировать Сообщить модератору
 Re: Снова запись в Ексел  [new]
MrShin
Member

Откуда:
Сообщений: 1277
Панург
потому-что поднимаются другие экземпляры Excel.

Так поднимается xlApp, он же и гасится. Что именно может остаться?
12 июл 19, 09:00    [21925416]     Ответить | Цитировать Сообщить модератору
 Re: Снова запись в Ексел  [new]
Кривцов Анатолий
Member

Откуда:
Сообщений: 336
MrShin
Так поднимается xlApp, он же и гасится. Что именно может остаться?
Это вы написали после того, как открыли диспетчер задач и не нашли там задачи Excel?
MrShin
Columns("C:C").Select 'Здесь возникает ошибка при повторном вызове подпрограммы.
Если такое написать в модуле Ёкселя, то неявно используется метод ActiveSheet. Т.к. всё вокруг родное, то всё прекрасно.
Если вы используете такое во внешней среде, то, видимо, поднимается вся цепочка Приложение - активная книга - активный лист. Это костыль и странно, что вообще так работает.
Некоторое время назад другой собрат вопрошал о таких же проблемах после успешного применения Set rng = CALLS(1,1), но один раз.

Кстати, а зачем вам Select? Вы еще расскажите, что активно используете объект Selection.
12 июл 19, 09:35    [21925439]     Ответить | Цитировать Сообщить модератору
 Re: Снова запись в Ексел  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 4384
MrShin,
...
Columns("C:C").Select 
...
Вот в этом месте появляется новый экземпляр Excel. Он не "гасится" и остаётся висеть.
12 июл 19, 09:37    [21925444]     Ответить | Цитировать Сообщить модератору
 Re: Снова запись в Ексел  [new]
MrShin
Member

Откуда:
Сообщений: 1277
Панург
Вот в этом месте появляется новый экземпляр Excel.

Офигеть! Вот это засада от МС! Не знал об этом, всегда только переменные использую, проблем не было. Зачем они так сделали, не понимаю. Это же огромное поле для непредсказуемого поведения приложений.
12 июл 19, 13:16    [21925678]     Ответить | Цитировать Сообщить модератору
 Re: Снова запись в Ексел  [new]
ИВП
Member

Откуда:
Сообщений: 225
Не ожидал такой активности мемберов начиная с четырех утра )))) Спасибо всем.

booby
Конечно это печально, что первый раз все работает,
поскольку даёт вам основание настаивать на чём-то своем.

Печально, что не работает второй раз.
Не вижу, где я на чем-то своем бы настаивал.

booby
Для вас было бы несомненно лучше, чтобы не работало вообще ни разу,
поскольку не оставляло бы сомнений в наличии ошибки.
Лучше было бы, чтобы работало каждый раз.

booby
Но может быть всё таки хотя бы попробовать прислушаться к тому что говорит Predeclared?
обязательно прислушаюсь, только непонятно к чему.
Он сказал, что Аксес не знает, что такое Columns; я сказал, что первый раз как-то знает.
booby
Excel остается висящим в памяти. Проверьте в диспетчере задач.

Вы скажите, что делать-то, если висит?

MrSin, Панург, Кривцов Анатолий! Спасибо!!!
12 июл 19, 14:03    [21925728]     Ответить | Цитировать Сообщить модератору
 Re: Снова запись в Ексел  [new]
ИВП
Member

Откуда:
Сообщений: 225
MrShin, извините за опечатку в Вашем нике (((((((((((((((
12 июл 19, 14:08    [21925730]     Ответить | Цитировать Сообщить модератору
 Re: Снова запись в Ексел  [new]
MrShin
Member

Откуда:
Сообщений: 1277
ИВП
Вы скажите, что делать-то, если висит?

Так вроде бы объяснили что нужно. Не используйте функции Экселя без предварительно созданных переменных. Т.е. вместо
Columns("C:C").Select

нужно писать
xlSheet0.Columns("C:C").Select

Эта команда выделит столбец С на листе РасЭ
xlSheet0.Select
12 июл 19, 14:33    [21925754]     Ответить | Цитировать Сообщить модератору
 Re: Снова запись в Ексел  [new]
MrShin
Member

Откуда:
Сообщений: 1277
Упс, xlSheet0.Select был лишним в предыдущем сообщении. Ну и в своей программе Select лучше не использовать
12 июл 19, 14:35    [21925755]     Ответить | Цитировать Сообщить модератору
 Re: Снова запись в Ексел  [new]
ИВП
Member

Откуда:
Сообщений: 225
MrShin,
Спасибо, заменил. Все работает
Такая запись была сделана при использовании макрорекордера.


Кстати, после
Set xlApp = Nothing

никакой Ексел в памяти не висит, так что уважаемый booby не прав, что беда из-за "висения".
12 июл 19, 14:52    [21925777]     Ответить | Цитировать Сообщить модератору
 Re: Снова запись в Ексел  [new]
MrShin
Member

Откуда:
Сообщений: 1277
ИВП
никакой Ексел в памяти не висит

Сейчас не висит, а вот если вставить команду
Columns("C:C").Select

то висеть будет, ибо она, как оказалось, запускает еще один экземпляр экселя, сам только что проверил, писали об этом выше.
Да, и перестает он висеть после команды xlApp.Quit
12 июл 19, 15:29    [21925812]     Ответить | Цитировать Сообщить модератору
 Re: Снова запись в Ексел  [new]
ИВП
Member

Откуда:
Сообщений: 225
MrShin,
так и я о том же.
12 июл 19, 15:37    [21925821]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить