Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Снова запись в Ексел / 20 сообщений из 20, страница 1 из 1
11.07.2019, 19:31
    #39836557
ИВП
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова запись в Ексел
Всем привет.
Простая задача: вывести часть данных из Аксеса в Екселевский файл 1.xls
В начале модуля формы описаны переменные, на кнопку toEXCEL повешен такой код.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
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


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

При повторном нажатии кнопки все ломается на строке
Код: vbnet
1.
Columns("C:C").Select   'Здесь возникает ошибка при повторном вызове подпрограммы.
...
Рейтинг: 0 / 0
11.07.2019, 19:32
    #39836559
ИВП
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова запись в Ексел
ИВП,

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

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

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

Чего не хватает в конце процедуры?
...
Рейтинг: 0 / 0
11.07.2019, 19:36
    #39836561
Predeclared
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова запись в Ексел
Откуда Access знать, что такое Columns?
...
Рейтинг: 0 / 0
11.07.2019, 19:50
    #39836564
ИВП
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова запись в Ексел
Predeclared,

Там же открывается Екселевский файл. И первый раз все работает.
...
Рейтинг: 0 / 0
12.07.2019, 00:34
    #39836609
Сергей Лалов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова запись в Ексел
ИВПColumns("C:C").Select 'Здесь возникает ошибка при повторном вызове подпрограммы.

[/src]

Может так?:

Код: vbnet
1.
 Range("C:C").Select



Попробуйте.


Column это несколько другой объект, у него часть свойств вообще к Excel не относиться.
...
Рейтинг: 0 / 0
12.07.2019, 00:52
    #39836611
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова запись в Ексел
ИВПPredeclared,

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

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

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



Excel остается висящим в памяти. Проверьте в диспетчере задач.
...
Рейтинг: 0 / 0
12.07.2019, 04:08
    #39836629
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова запись в Ексел
С функциями Экселя из Акцесса можно работать ТОЛЬКО через переменные с объектами Экселя - через объекты xl* в вашем случае. Любое выражение, которое не содержит такую переменную работать не будет. Т.е. в ваем случае это будет
Код: vbnet
1.
xlSheet0.Columns


И старайтесь не использовать Select и Activate без реальной надобности. Я понимаю, что макрорекордер так пишет, но это место потенциальных ошибок, котрые очень трудно выявить. Заменяйте все на переменные с объектами.
...
Рейтинг: 0 / 0
12.07.2019, 04:10
    #39836630
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова запись в Ексел
boobyExcel остается висящим в памяти.
Почему остается? Там же есть
Код: vbnet
1.
xlApp.Quit


перед ним.
...
Рейтинг: 0 / 0
12.07.2019, 05:01
    #39836633
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова запись в Ексел
MrShinПочему остается?потому-что поднимаются другие экземпляры Excel.
...
Рейтинг: 0 / 0
12.07.2019, 09:00
    #39836653
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова запись в Ексел
Панургпотому-что поднимаются другие экземпляры Excel.
Так поднимается xlApp, он же и гасится. Что именно может остаться?
...
Рейтинг: 0 / 0
12.07.2019, 09:35
    #39836664
Снова запись в Ексел
MrShinТак поднимается xlApp, он же и гасится. Что именно может остаться? Это вы написали после того, как открыли диспетчер задач и не нашли там задачи Excel?
MrShinColumns("C:C").Select 'Здесь возникает ошибка при повторном вызове подпрограммы. Если такое написать в модуле Ёкселя, то неявно используется метод ActiveSheet. Т.к. всё вокруг родное, то всё прекрасно.
Если вы используете такое во внешней среде, то, видимо, поднимается вся цепочка Приложение - активная книга - активный лист. Это костыль и странно, что вообще так работает.
Некоторое время назад другой собрат вопрошал о таких же проблемах после успешного применения Set rng = CALLS(1,1), но один раз.

Кстати, а зачем вам Select? Вы еще расскажите, что активно используете объект Selection.
...
Рейтинг: 0 / 0
12.07.2019, 09:37
    #39836668
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова запись в Ексел
MrShin,
Код: vbnet
1.
2.
3.
...
Columns("C:C").Select 
...

Вот в этом месте появляется новый экземпляр Excel. Он не "гасится" и остаётся висеть.
...
Рейтинг: 0 / 0
12.07.2019, 13:16
    #39836811
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова запись в Ексел
ПанургВот в этом месте появляется новый экземпляр Excel.
Офигеть! Вот это засада от МС! Не знал об этом, всегда только переменные использую, проблем не было. Зачем они так сделали, не понимаю. Это же огромное поле для непредсказуемого поведения приложений.
...
Рейтинг: 0 / 0
12.07.2019, 14:03
    #39836841
ИВП
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова запись в Ексел
Не ожидал такой активности мемберов начиная с четырех утра )))) Спасибо всем.

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

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

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

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

MrSin, Панург, Кривцов Анатолий! Спасибо!!!
...
Рейтинг: 0 / 0
12.07.2019, 14:08
    #39836843
ИВП
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова запись в Ексел
MrShin, извините за опечатку в Вашем нике (((((((((((((((
...
Рейтинг: 0 / 0
12.07.2019, 14:33
    #39836860
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова запись в Ексел
ИВПВы скажите, что делать-то, если висит?
Так вроде бы объяснили что нужно. Не используйте функции Экселя без предварительно созданных переменных. Т.е. вместо
Код: vbnet
1.
Columns("C:C").Select


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


Эта команда выделит столбец С на листе РасЭ
Код: vbnet
1.
xlSheet0.Select
...
Рейтинг: 0 / 0
12.07.2019, 14:35
    #39836861
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова запись в Ексел
Упс, xlSheet0.Select был лишним в предыдущем сообщении. Ну и в своей программе Select лучше не использовать
...
Рейтинг: 0 / 0
12.07.2019, 14:52
    #39836872
ИВП
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова запись в Ексел
MrShin,
Спасибо, заменил. Все работает
Такая запись была сделана при использовании макрорекордера.


Кстати, после
Код: vbnet
1.
Set xlApp = Nothing


никакой Ексел в памяти не висит, так что уважаемый booby не прав, что беда из-за "висения".
...
Рейтинг: 0 / 0
12.07.2019, 15:29
    #39836886
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова запись в Ексел
ИВПникакой Ексел в памяти не висит
Сейчас не висит, а вот если вставить команду
Код: vbnet
1.
Columns("C:C").Select


то висеть будет, ибо она, как оказалось, запускает еще один экземпляр экселя, сам только что проверил, писали об этом выше.
Да, и перестает он висеть после команды xlApp.Quit
...
Рейтинг: 0 / 0
12.07.2019, 15:37
    #39836891
ИВП
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова запись в Ексел
MrShin,
так и я о том же.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Снова запись в Ексел / 20 сообщений из 20, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]