Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сохранение excel файла через макрос access / 14 сообщений из 14, страница 1 из 1
11.08.2016, 11:13
    #39290181
BSH
BSH
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение excel файла через макрос access
Добрый день.
У меня есть код для сохранения и закрытия exsel файла.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
For i = 1 To 15000: DoEvents: Next
Set xlWb = GetObject(, "Excel.Application")
xlWb.Application.Visible = True
xlWb.Application.displayalerts = False
xlWb.Application.activeworkbook.SaveAs FileName:="F:\SC\Bykovo Warehouse\ÝÒÈÊÅÒÊÈ\Delivery access.XLSX", FileFormat:=51
xlWb.Application.displayalerts = True
xlWb.Quit



Но в нем есть особенность, он закрывает все файлы exsel. Может кто подскажет как прописать закрытие определенного файла.
...
Рейтинг: 0 / 0
11.08.2016, 11:27
    #39290189
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение excel файла через макрос access
Так, надеюсь, будет понятнее, как работать со сруктурой объектов:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Set xlApp = GetObject(, "Excel.Application")
xlApp.visible = True
xlApp.DisplayAlerts = False
Set xlWork = xlApp.ActiveWorkbook
xlWork.SaveAs FileName:="F:\SC\Bykovo Warehouse\Delivery access.XLSX", FileFormat:=51
xlWork.Close
xlApp.DisplayAlerts = True
...
Рейтинг: 0 / 0
11.08.2016, 11:28
    #39290192
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение excel файла через макрос access
Код: vbnet
1.
xlapp.workbooks("bookname.xlsx").close 
...
Рейтинг: 0 / 0
11.08.2016, 11:37
    #39290200
BSH
BSH
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение excel файла через макрос access
спасибо большое все вроде бы работает.
а то неделю искал ответ по инету.
...
Рейтинг: 0 / 0
11.08.2016, 11:50
    #39290208
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение excel файла через макрос access
И чтобы не было проблем - обязательно очищай объект, указывающий на ActiveWorkbook. До закрытия книги...
А ещё лучше - вообще не используй его явно, лучше через
Код: vbnet
1.
2.
3.
With xlApp.ActiveWorkbook
  '...
End With
...
Рейтинг: 0 / 0
11.08.2016, 11:57
    #39290217
BSH
BSH
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение excel файла через макрос access
спасибо.
...
Рейтинг: 0 / 0
11.08.2016, 12:19
    #39290239
Lieutenant Pigeon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение excel файла через макрос access
AkinaИ чтобы не было проблем - обязательно очищай объект, указывающий на ActiveWorkbook. До закрытия книги...
А ещё лучше - вообще не используй его явно , лучше через
Код: vbnet
1.
2.
3.
With xlApp.ActiveWorkbook
  '...
End With


Akina, про очистку понятно.

А про явность - почему?
И чем, для достижения неявности, структура With предпочтительнее?
Я понимаю, что ты тут от чего-то бережешься... От чего?

Я именно так и делаю - как ты говоришь, но просто, по выработавшемуся стилю кодирования...
И без понимания подводного камня, на который ты намекаешь.

Ну, к примеру, а если будет одна лишь строка - ее все равно загонять ее в With?

А если делать по аналогии, как в случае с CurrentDB, к примеру?

MrShin, кстати, так и поступил:
Код: plaintext
Set xlWork = xlApp.ActiveWorkbook

Расскажи, вобщем, поподробнее, плз.
.
...
Рейтинг: 0 / 0
11.08.2016, 12:34
    #39290263
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение excel файла через макрос access
Lieutenant Pigeonпро явность - почему?
Ну вот представь... забахал ты в переменную ссылку на активный воркбук. Пробуешь его закрыть... и вот тут в зависимости от обстоятельств может переменная очиститься (=Nothing), а может и не закрыться... а если закроется, а ты вдруг где попробуешь её использовать как инициализированную?

Lieutenant Pigeonа если будет одна лишь строка - ее все равно загонять ее в With?
Я тебе говорю об опасности заведения объектной переменной со ссылкой на текущую книгу.
Кстати, если юзер посередь процесса своими шаловливыми ручками кликнет на другую книгу - как полагаешь, чем дело кончится?

Lieutenant PigeonА если делать по аналогии, как в случае с CurrentDB, к примеру?
А нельзя по аналогии! Активной БД, в отличие от активной книги, как бы не бывает...
...
Рейтинг: 0 / 0
11.08.2016, 12:49
    #39290274
Lieutenant Pigeon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение excel файла через макрос access
Ага. Спасибо.

Только, With все равно ведь не спасает, поскольку:Akinaговорю об опасности заведения объектной переменной со ссылкой на текущую книгуБудем настороже :)

Только у меня и так при работе с объектами весь код проверками-перепроверками на Nothing утыкан :)
.
...
Рейтинг: 0 / 0
11.08.2016, 13:01
    #39290283
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение excel файла через макрос access
With и явное объявление отличаются только тем, что With создает временную переменную в стеке, которая освобождается автоматически сразу после End With, а задекларированная переменная лежит в куче, пока не будет либо явно удалена через =Nothing, либо удалена сборщиком мусора при выходе из процедуры. Последнее происходит не всегда, т.к. есть тонкости со счетчиками использования. Т.е. With использовать надежнее в плане памяти, в остальном - дело вкуса.
...
Рейтинг: 0 / 0
11.08.2016, 13:06
    #39290288
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение excel файла через макрос access
AkinaЯ тебе говорю об опасности заведения объектной переменной со ссылкой на текущую книгу

Не совсем понял принципиальное отличе заведения объектной переменной от With - будет та же ссылка на текущий активный воркбук, даже если юзер и успел кликнуть на другой или закрыть текущий. А если поменяет после начала блока (или заведения переменной), то работать код будет все равно с тем воркбуком, который был активным на момент присвоения переменной.
...
Рейтинг: 0 / 0
11.08.2016, 13:15
    #39290301
Lieutenant Pigeon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение excel файла через макрос access
MrShin,

хорошо, что ты сам подтянулся - я хотел было пихнуть тебя, увидев в соседней ветке :)

Сразу вопрос:
MrShinWith и явное объявление ... М.б. обращение ? Не?

А за дальнейшую раскладку - снкс.
Познавательно и, главное, доступно.
.
...
Рейтинг: 0 / 0
11.08.2016, 13:30
    #39290309
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение excel файла через макрос access
Lieutenant PigeonМ.б. обращение ? Не?
Ну да, не объявление, конечно, а присвоение переменной указателя на объект, т.е. момент Set для объявленной переменной или запись в стек указателя для With. Для случая с With, думаю, можно использовать и термин "объявление", т.к. объявление и присвоение совпадают.

Обращение - это уже работа с присвоенным указателем.
...
Рейтинг: 0 / 0
11.08.2016, 13:33
    #39290311
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение excel файла через макрос access
Lieutenant PigeonWith все равно ведь не спасает, поскольку
Да, для устранения других вышеописанных проблем лучше использовать
Код: vbnet
1.
With xlApp.Workbooks(xlApp.ActiveWorkbook.Name)
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сохранение excel файла через макрос access / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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