powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Снова запись в Ексел
20 сообщений из 20, страница 1 из 1
Снова запись в Ексел
    #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
Снова запись в Ексел
    #39836559
ИВП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИВП,

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

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

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

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

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

[/src]

Может так?:

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



Попробуйте.


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

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

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

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



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


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


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

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

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

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

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

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

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

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


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


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


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


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


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


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