powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Из Аксесса в шаблон Екселя - есть ли надежный способ?
56 сообщений из 56, показаны все 3 страниц
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32491716
tim2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помогите с надежным способом работы с Екселем из Аксесс, в ситуации, когда участвует шаблон документа. У меня то работает "влет", то сыпятся сообщения типа "сервер СРС не доступен". В таблице "Files", в поле "Shablon"(поле объекта OLE) храню шаблоны, у каждого есть ID. В Форме, откуда вызывается все это дело, есть скрытый элемент Shabl(свободная рамка объекта). Работа с Екселем начинается так:
Код: plaintext
1.
2.
3.
4.
5.
6.
    [Forms]![Заявки]!Shabl = DLookup( "Shablon" ,  "Files" ,  "ID = 5 ") 
    [Forms]![Заявки]!Shabl.Action = acOLEActivate
    Set xlsApp = GetObject(,  "Excel.Application" )
    xlsApp.Visible = True
    Set xlsSheet = xlsApp.Worksheets (1 )
    xlsApp.WindowState =  -4137 
     xlsSheet.Activate

Где тут самое "слабое" место не нашел, но может есть у кого отлаженный код?
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32491784
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) GetObject(, "Excel.Application") даст ошибку, если Erctkm yt pfuhe;ty d gfvznm
2) Set xlsSheet = xlsApp.Worksheets(1) даст ошибку, если в екселе не открыто ни одной книги
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32491802
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Victoshaесли Erctkm yt pfuhe;ty d gfvznm
Перевожу:
если Уксель не загружен в память
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32492145
tim2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так как-же приведенный мною код должен выглядеть?
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32492162
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
смотря что хочешь получить - если ошибку - то код верен

есть еще createobject
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32492171
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
наверное он у тебя не успевает запуститься а ты его уже ловишь
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32492212
CtrlAlt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотри
http://www.ctrlalt.nm.ru/AccessExcel.htm

Пункт 3. Использование шаблонов.

С тех пор как я использую этот метод, ни разу ничего не глючело.
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32492486
tim2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 CtrlAlt:
так ты хранишь шаблон в виде бинарного файла? Чего-то я так не делал никогда, да и в статье написано, что тогда шаблон напрямую нельзя посмотреть.
А какой код при работе с шаблоном-OLE в статье нет...:(((
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32492533
CtrlAlt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы посмотреть шаблон, нужно его сохранить куда-нибудь в файл функцией SaveXLS. А потом открыть Excel'ем.

Работу с отчетами я сделал в виде формы с двумя кнопками - "загрузить шаблон", "сохранить шаблон".
Нажимаем сохранить шаблон, выбираем папку куда сохранять и сохраняем.

Работы с шаблоном.
1. Сохраняем его в папку где должен лежать отчет
2. Делаем на него GetObject или CreateObject
3. Изменяем как надо
4. Сохраняем под нужным именем
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32492568
tim2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О! Надо же - работает(это я про бинарный способ)!!!
Исправил ошибку в процедуре вытаскивания шаблона из бд, а именно:
Код: plaintext
XLS = rst(F).GetChunk (0 , rst(F).FieldSize)
до этого перед FieldSize было, почему-то, rst( REG ).
Появляются вопросы: после вытаскивания шаблона он сразу, до обработки, сохраняется в указанной директории, а если он не нужен(допустим данные ошибочные вывелись), его ручками удалять? В случае с OLE - документ, без соответствующей команды, как бы висит в воздухе и можно его просто закрыть, не сохраняя, и не беспокоиться, что плодишь мусор, а здесь как?
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32492658
CtrlAlt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я делаю как:
1. Сохраняю шаблон под именем temp
2. Делаю необходимые действия
3. Сохраняю SaveAs в нужное имя
4. Удаляю шаблон

Если вдруг данные ошибочны, пункт 3 можно опустить. Хотя такую проверку желательно делать до выгрузки. И вообще не выгружать если что-то не так.
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32492777
tim2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И с бинарным файлом непонятки, после вытаскивания шаблона из бд в файл, пишу:
Код: plaintext
1.
2.
3.
4.
Set xlsApp = GetObject(Путь к шаблону + имя шаблона)
    xlsApp.Application.Visible = True
    Set xlsSheet = xlsApp.Worksheets (1 )
    xlsApp.WindowState =  -4137 
     xlsSheet.Activate
и на третьей строке получаю: "Ошибка программирования объектов. Сервер RРС недоступен."
Как мне добраться до момента, когда собственно сама работа с Екселем начнется?
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32492819
CtrlAlt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GetObject не очень люблю. Делаю так:

SaveXLS "Template1", Path & "temp.xls"

Set XlsApp = CreateObject("Excel.Application")
XlsApp.Workbooks.Open Path & "temp.xls"

XlsApp.Visible=true
Set xlsSheet= xlsApp.Worksheets(1)
...
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32493308
tim2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 CtrlAlt:
Чего-то я запутался... Вот начало моей проц-ры(бинарный файл уже извлечен из бд и находится по адресу "E:\....xls"):
Код: plaintext
1.
2.
3.
Set xlsApp = GetObject( "E:\....xls" )
xlsApp.Application.Visible = True
Set xlsSheet = xlsApp.Worksheets (1 )
xlsApp.Parent.Windows (1 ).Visible = True

Вопрос1: почему начала у нас разные, а работает и так, и так, и какое начало правильней?
Вопрос2: почему у тебя нет самой последней моей строки и вообще зачем она(содрал ее из примера в Help-e)?
У меня дальше по коду есть такие строки:
Код: plaintext
1.
xlsSheet.Range(.cells (13 ,  3 ), .cells (26 ,  1 )).Select
xlsApp.Selection.Cut
на последней строке получаю сообщение, что этот метод объект не поддерживает.
Вопрос3: когда я работал с шаблоном в виде OLE, то все работало, что случилось?
Где-то тут, может, Application добавить, только где?
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32493348
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВопрос1: почему начала у нас разные, а работает и так, и так, и какое начало правильней?

a) Set xlsApp = GetObject("E:\....xls")
b) Set XlsApp = CreateObject("Excel.Application")

а) подъем КОНКРЕТНОЙ книги - должна существовать в природе
б) подъем екселя как прлижения, еще до загрузки в него конкретной книги.

автор xlsSheet.Range(.cells(13, 3), .cells(26, 1)).Select
xlsApp.Selection.Cut

замени на xlsSheet.Range(.cells(13, 3), .cells(26, 1)).Cut

ответ на вопрос 3 - VBA код работает в контекстах разных контейнерных приложений, вот и ведет себя неодинаково.
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32493437
tim2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
б) подъем екселя как прлижения, еще до загрузки в него конкретной книги. - так ведь в следующей строке:
Код: plaintext
XlsApp.Workbooks.Open Path &  "temp.xls" 
ты "поднимаешь" конкретную книгу, получается, что моя одна строка = твоим двум, или я чего не понимаю?
Код: plaintext
xlsApp.Selection.Cut
заменил на
Код: plaintext
xlsApp.Application.Selection.Cut
(еще не читал тогда твоего ответа), ошибка исчезла, но осталось непонимание: где надо указывать XlsApp, а где xlsSheet? Использую их скорее интуитивно, чем разумно.
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32493463
CtrlAlt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tim2

Вопрос 1
По сути это 2 идентичных начала. Аналогия: у тебя есть файл .xls. Ты его можешь открыть двойным кликом на него, тогда Винда запустит приложение, которое с ним проассоциировано (MS Excel) и в нем откроет твой файл (твой метод - GetObject). Либо ты спм можешь открыть Excel и через файл-Open открыть нужный файл (CreateObject). В принципе одно и то же, но во второй случай более гибкий. А вообще как кому нравиться.

Вопрос 2
Всякие там Activate, Select, Selection - это от лукавого. Так обычно recorder макросов записывает, а на деле практически всегда можно (и нужно) от них избавляться. В твоем случае я бы делал так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Dim XLS, WB, S, C

Set XLS = CreateObject( "Excel.Application" ) 
Set WB=XLS.Workbooks.Open  "E....xls"  

XLS.Visible=true 
Set S= XLS.Sheets (1 )
Set C=S.Cells

S.Range(C (13 ,  3 ),C (26  ,1 )).Cut
 
Set C=nothing
Set S=nothing
Set WB=nothing
Set XLS=nothing



Воспрос 3.
Встроенное OLE работает иногда немного на так, как Excel, созданные CreateObject, поэтому я от него и отказался.

Если ты используешь познее связывание, то отключи библиотеку MS Excel в референсах. А потом откомпилируй. Access тебе покажет места, где у тебя смешано раннее и позднее связываение и не даст напортачить.

Дело в том, что когда ты подключаешь библиотеку, то можешь использовать всякие объекты типа Range, Cells и прочие, но они не будут относиться к твоему Excel созданному CreateObject и Access будет ругаться типа объект не найден, метода нет и пр. Поэтому либо используешь класс Excel

Dim XLS as Excel

Либо CreateObject и тогда таких конструкций не должно быть

xlsSheet.Range(.cells(13, 3), .cells(26, 1)).Select

Нужно явно указывать объект (если, конечно ты with какой-нибудь не забыл отобразить)
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32493613
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторДело в том, что когда ты подключаешь библиотеку, то можешь использовать всякие объекты типа Range, Cells и прочие, но они не будут относиться к твоему Excel созданному CreateObject и Access будет ругаться типа объект не найден, метода нет и пр. Поэтому либо используешь класс Excel

Dim XLS as Excel

Либо CreateObject и тогда таких конструкций не должно быть

xlsSheet.Range(.cells(13, 3), .cells(26, 1)).Select

я бы тут подправил малость терминологию.

деталь1 - объекта Excel - нет, есть Excel.Application, Excel.Workbook, Excel.Worksheet и т.д.
так вот вызов GetObject("....xls") - возвращает WORKBOOK,
а вызов CreateObject(,"Excel.Application") - возвращает Application

деталь 2 - Selection, использовать МОЖНО, но применительно к Applicationб или Windows
то есть код, про который вопрос, тогда так выглядит

xlsSheet.Range(.cells(13, 3), .cells(26, 1)).Select
xlsApp.Application.Selection.Cut

ВЕДЬ xlApp В ДАННОМ СЛУЧАЕ - ОБЪЕКТ КЛАССА Workbook

совет можно и перевернуть - ПОЛЕЗНО смешивать "раннее" и "позднее" связывание. используя строго раннее пишут так

dim xlApp as Excel.Application
Set xlApp = NEW Excel.Application

СМЕШИВАЯ ранее и поздее пишут так

dim xlApp As Excel.Application
set xlApp = CreateObject(,"Excel.Application")

в окончательном виде, совет выглядит так, по крайней мере на этапе отладки ИСПОЛЬЗУЙ связь с библиотекой типов И ВСЕГДА ПЫТАЙСЯ ИСПОЛЬЗОВАТЬ ТИПИЗИРОВАННЫЕ ПЕРЕМЕННЫЕ.

ЕСЛИ БЫ ТАК было сделано, то сразу стало бы понятно

что
Dim tBook As Excel.Application
Set tBook = GetObject("c:\TestBook.xls")

Дает ОШИБКУ ИСПОЛНЕНИЯ, потому, что объект, который возвращяет GetObject, другого типа, не того, что заявлен в объявлении переменной, а именно типа Workbook

типа не со зла я, а исключительно в целях поправить неточности...
-)
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32493655
tim2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да причем здесь "не со зла"? Наоборот - спасибо, за понятное объяснение!!! :))
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32493692
tim2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И плавненько так возвращаемся почти к началу ветки - к бинарному файлу:
В процедуре сохранение шаблона в бд указывается только файл-источник и имя столбца таблицы. Соответственно при извлечении из бд файл указывается как
Код: plaintext
XLS = rst(F).GetChunk (0 , rst(F).FieldSize)
, а как быть если нужно несколько шаблонов хранить-извлекать, помещать каждый в отдельное поле?
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32493703
CtrlAlt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victosha
Насчет Excel.Application согласен. Собственно это и имел в виду, может не совсем точно выразился.

Насчет смешивания раннего и позднего связывания категорически не согласен.

dim xlApp As Excel.Application
set xlApp = CreateObject(,"Excel.Application")

Не верный на мой взгляд подход. Например что будет если подцеплена библиотека 8 Excel, а по умолчанию стоит 10 и GetObject его вернет? Зачем вообще использовать в этом случае CreateObject?

А про GetObject правильно. Вспомнил почему я его не применял. Он как раз возвращал книгу вместо application, что не очень удобно. А CreateObject может сделать что угодно.

tim2
Можно в разных полях. Как предложено у меня (используется всего 2 шаблона). Либо сделать одно поле и несколько строк, но тогда функцию нужно чуть подызменить. Сделать там SELECT WHERE
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32493748
tim2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 CtrlAlt:
3. Сохраняю SaveAs в нужное имя
Но при SaveAs диалоговое окно не возникает, выходит, что файл сохраняется автоматом? А как ты поступаешь, если то, что сохранилось "не такое", удаляешь руками или опять SaveAs под тем же именем, затирая этим "не такой" вариант?
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32493823
CtrlAlt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Объясни подробнее, что такое "не такой" вариант?
У меня файлы выгружаются автоматом, без окрывания Excel (Visible=false, так быстрее, кстати) и сохраняются в указанную папку. Т.е. в Access нажал на кнопку и все распечаталось. "Не таких" файлов у меня нет. Разве что при формировании отчета реализуется алгоритм расстановки подписей к диаграммам, и когда это не возможно сделать (вероятность 0.2%) файл сохраняется с префиксом no_ . Потом можно вручную подправить ежели что. Это имеется ввиду?
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32493847
tim2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не совсем: гонится, без открытия, в Ексель, ну скажем, - спецификация. Потом в "указанной папке" файл открывается и обнаруживается "ляп", ну скажем, - нет реквизитов, далее - читай с начала...
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32494000
CtrlAlt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну это уже тонкости вашей конкретной задачи. Собственно от метода выгрузки в Excel это не зависит. Но опять же повторюсь, нет реквизитов не надо и печатать. Проверки на корректность данных нужно делать ДО выгрузки в Excel.
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32494057
фыыф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
все весьма интересно.
(я тут как то наткнулся на проблемы с открытием OLE объекта на Выборочных машинах, т.ч. возможно на будущее и воспользуюсь предложенной методой)


что хочется:
в некоторых случаях не хочется завязываться ("надолго") на определенный сохранненный временный файл. (С тем, чтобы можно было работать из нескольких сеансов одной машины). И вообще, иногда нужно дать пользователю несохраненный документ XLS по завершении создания. (чтобы он сам посмотрел, что ему надо, а что нет, и сохранил, как ему потребуется).

накидал (не шибко разбираясь в библиотеке ёкселя) примерно следущий вариант выгрузки
(как писать прямо в окно, я не сообразил, т.ч. передаемся через короткоживущую времянку. скорее направление мысли, чем законченная реализация):
Код: plaintext
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.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
'Вытаскивает шаблоны отчетов из бд, в активное окно
Public Function OpenXLS(oName As String, FileName As String) As Object
Dim rst As Recordset, F As String
Dim XLS() As Byte
    F = "XL"
    Set rst = CurrentDb.OpenRecordset("TXLS")
    rst.inDex = "oName"
    rst.Seek "=", oName
    If Not rst.NoMatch Then
        'Записываем в файл
        XLS = rst(F).GetChunk (0 , rst(F).FieldSize)
        Open FileName For Binary Access Write As #1
        Put #1, , XLS
        Close #1
        'SaveXLS = True
    Else
        'Set OpenXLS = Nothing
        Exit Function
    End If
    rst.Close
'перекинем в новый несохраненный лист
Dim xlsApp As Object ' Excel.Application '
Dim WB As Object 'Workbook
Dim WBt As Object 'Workbook
    Set xlsApp = CreateObject("Excel.Application")
    Set WBt = xlsApp.Workbooks.Open(FileName)
    xlsApp.SheetsInNewWorkbook = 1
    Set WB = xlsApp.Workbooks.Add
    WB.Sheets(1).Name = "tmp"
    'открыть temp
    On Error Resume Next
    Do While Err =  0 
        WBt.Sheets (1 ).Move AFTER:=WB.Sheets (1 )
    Loop
    'WB.Sheets("tmp").Delete 'не понятно как отключить запрос подтверждения
    'поэтому создадим новый и задвинем туда лист "tmp"
    Set WBt = xlsApp.Workbooks.Add
    WB.Sheets("tmp").Move AFTER:=WBt.Sheets(1)
    WBt.Close False
    Set WBt = Nothing
    Set OpenXLS = WB
    'xlsApp.Visible = True 'покажем после заполнения данными
End Function
'тестируем
Public Function testOpXLS()
Dim xl As Object
    Set xl = OpenXLS( "ОС-4 ",  "C:\Temp\test.XLS" )
    xl.Application.Visible = True
End Function
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32494076
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНасчет смешивания раннего и позднего связывания категорически не согласен.

dim xlApp As Excel.Application
set xlApp = CreateObject(,"Excel.Application")

Не верный на мой взгляд подход. Например что будет если подцеплена библиотека 8 Excel, а по умолчанию стоит 10 и GetObject его вернет? Зачем вообще использовать в этом случае CreateObject?

0. Необходимо понимать, что и GetObject и CreateObject - функции ПОЗДНЕГО связывания.

1. Позднее связывание, в первую очередь, для "скринтования", например, если отлаженный код надо в VBS перевести.

2. Главное преимущество ЧИСТОГО ПОЗДЕНГО связывания - локализация проблем.
Рассмотрим варианты, возникающие при раннем связывании
а) Использована связь с библиотекой типов (dim xl as Excel.Application), на целевой машине НИКАКОГО Экселя нет - результат - ВЕСЬ ПРОЕКТ окажется нерабочим, а сумеешь ли ты об этом дагадаться (что вот именно Excel-я не хватает) и как быстро - еще вопрос. При чистом позднем связывании отвалится только та часть кода, которая с экселем пытается работать, А ВСЕ ОСТАЛЬНОЕ БУДЕТ РАБОТАТЬ. Проблему можно решать методом отделения мух от котлет.

б) Ексель есть, но другой версии. Ссылка на эксель, в норме, должна переустановиться, и как правило, это нормально происходит ( ЗА НЕКОТОРЫМИ СПЕЦИФИЧЕСКИМИ ИСКЛЮЧЕНИЯМИ, одно из них - политика безопасности конкретного пользователя ). Однако New Excel.Application при этом МОЖЕТ не сработать - NEW вообще не шибко стабильно ведет себя, применительно к межпроцессному подъему объектов. CreateObject же честно вернет экземпляр.

в) Установлено "сразу много красивых и разных Екселей".
тут сначала см выше, а потом читаем ниже
"Excel.Application" - независимый от версии указатель. Подниматься при этом будет тот, который в соответствующем месте реестра прописан, как поднимаемый по умолчанию. При этом подъем сопровождается цепочкой поиска уточнения реализации. Если в твоем коде задействованы возможности специфической версии ИЛИ недоволен временем старта екселя, то уточняешь описатель до "Excel.Application.8" (9/10)
(может совру, но кажется, при наличии старшей версии, младший вызов должен работать) Уточненнный вызов и подъем объекта ПРОИСХОДИТ В РАЗЫ БЫСТРЕЕ, за счет резкого уменьшения объема сканирования реестра.

Так вот, если изначально ссылка была на старшую версию, на целевой машине - младшая, пороект "компилирован", то NEW провалится почти наверняка. тут перекомпилировать придется. (то есть с mde будут траблы не то, чтобы на 100%, но я бы советовал не удивляться, если будут) Get\CreateObject - работает.

Итак, если задействована раннее связывание переменных, то
CreateObject используется для СТАБИЛИЗАЦИИ межпроцессной инициализации объектов авоматизации, а задействованная библиотека типов позволяет УСКОРИТЬ Обращение к методам ПОДНЯТОГО объекта. В этом смысл смешивания.

При чистом поздем связывании код а) пригоден к непосредственному переносу в VBS\HTML
б) не нарушается работоспособность проекта в целом

Естественно, за все надо платить - при поздем связывании расплата - скорость вызова объектных методов (и свойств)
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32494257
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот подумалось - есть еще одна, на мой взгляд, веская причина, чтобы по крайней мере на этапе отладки поставить ссылку на ексель и писать именно так
dim xlApp As Excel.Application

При этом начинает работать IntelliSence и количество вопросов "про ексель" СУЩЕСТВЕННО снижается.
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32494265
tim2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2фыыф:
а зачем создавать новый и задвигать туда...? Убрал строки после Loop и до конца процедуры, оставил только Set OpenXLS = WB. Результат абсолютно такой-же. Кстати, я так понимаю, что обработка листа должна быть после этого самого "Set OpenXLS = WB"?
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32494388
CtrlAlt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victosha

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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Sub test()
Dim xlApp As Excel.Application
'Dim xlApp As Object'
Dim i As Long
Dim t As Date

Set xlApp = CreateObject( "Excel.Application" )


xlApp.Visible = True
xlApp.Workbooks.Add

t = Now()
For i =  1  To  10000 
    xlApp.Sheets (1 ).Cells(i,  1 ) =  1 
Next i

Debug.Print Format(Now() - t,  "hh:nn:ss" )

End Sub


Который показал что при чистом позднем связывании скорость 18 сек, при смешанном - 33. Результат меня и самого удивил, если честно.

Так что мой выбор - чисто позднее связывание, без всяких отваливающихся ссылок. А методы и свойства я и так помню.
Еще по поводу скорости формирования Excel. В предложенной мной статье в начале идет описание способа, который позволяет ускорить вывод в десятки раз и вообще не заморачиваться по поводу связывания, IntelliSence и пр.
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32494496
фыыф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 tim2
автора зачем создавать новый и задвигать туда...?
чистоплюство (убираю листик "tmp", которого нет в шаблоне)...

авторобработка листа должна быть после этого самого "Set OpenXLS = WB"?
ага. обработка (вставка данных и т.п.) примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Public Function testOpXLS()
Dim xl As Object
    Set xl = OpenXLS( "ОС-4 ",  "C:\Temp\test.XLS" )
if xl Is Nothing then 
    MsgBox  "что-то не так" 
    exit Function
end if
    MySubInsertIntoXL xl 'некая проце-дурища заполнения шаблона
    xl.Application.Visible = True
End Function
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32494574
tim2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще больше "порезал" процедуру, осталось только:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Set rst = CurrentDb.OpenRecordset( "TXLS" )
    rst.Index =  "oName" 
    rst.Seek  "=" , oName
    If Not rst.NoMatch Then
        'Записываем в файл'
        XLS = rst(F).GetChunk (0 , rst(F).FieldSize)
        Open FileName For Binary Access Write As #1
        Put #1, , XLS
        Close #1
     Else
        Exit Function
    End If
    rst.Close
Dim xlsApp As Object ' Excel.Application '
Dim WBt As Object 'Workbook
    Set xlsApp = CreateObject( "Excel.Application" )
    Set WBt = xlsApp.Workbooks.Open(FileName)
    xlsApp.SheetsInNewWorkbook =  1 
      Set OpenXLS = WBt
и результат по-прежнему тот-же. А чего я наделал-то? Или там изначально был избыточный код?
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32494615
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
А про GetObject правильно. Вспомнил почему я его не применял. Он как раз возвращал книгу вместо application, что не очень удобно. А CreateObject может сделать что угодно.


Лично я после статьи из Гетца как раз наоборот, стал везде использовать GetObject, потому как именно GetObject может выступать в любой роли, в отличи от CreateObject:

GetObject( , "Excel.Application") - если Excel УЖЕ запущен, то подсоединится к нему, если же нет, то вернет ошибку исполнения

GetObject( "", "Excel.Application") - ведет себя абсолютно также как и CreateObject , создает новый экземпляр Excel

GetObject( "C:\Book.xls") - Если Excel не загружен в памяти: загружает приложение и в него загружает файл. Если Excel загружен то использует этот экземпляр и в него загружает файл. И наконец если и Excel загружен и файл тоже уже загружен, тогда возращает просто указатель - очень, очень удобный вариантик иногда, чтобы самому не писать лишних проверок и т.д. и .т.п.

GetObject("C:\Book.xls" , "Excel.Application") - Ведет себя как верхний вариант, токо можно принудительно укать приложение в котором надо открыть этот файл. Например у Вас два Excel и вы хотите открыть этот файл в старой версии Excel, тогда пишем - GetObject("C:\Book.xls" , "Excel.Application.8")
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32494685
CtrlAlt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может у меня руки кривые, но вариант

GetObject("C:\Book.xls" , "Excel.Application")

Не работает и никогда у меня и не работал. Говорит File Name or Class name not found during Automation operation. Работает только в таком варианте:


GetObject("C:\Book.xls" , "Excel.Sheet"). Может ему помочь как-то надо?


К тому же если печать отчетов фоновая, часто нужно чтобы открытые Excel не тревожились. А то если user что-то ваял сам по себе в Excel, а потом запустил печать отчетов, ему придется глядеть на мелтешение и ждать пока процесс завершится, т.к. отчеты печатаются в его экземпляре Excel.
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32494859
tim2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рабочий день кончается, а я так и не узнал, почему порезанная мной процедура продолжает работать....
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32494960
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1
авторРабочий день кончается, а я так и не узнал, почему порезанная мной процедура продолжает работать....

а какая она была "непорезанная" ?

2

насчет порезать
вот это, например,
авторxlsApp.SheetsInNewWorkbook = 1

Вам к чему?
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32494986
tim2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А непорезанная она была в сообщении от "фыыф"(либо в начале этой страницы, либо в конце первой).
---------------------------------------
а что делает "xlsApp.SheetsInNewWorkbook = 1"?
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32494996
фыыф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ппплин.

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

я фуею, че ж ты смотрел еще? ежели тебе пох., "прямо в файле" ковырякаться, или в "несохраненном" новом документе. Если файл годиться - нечего изворачиваться. Открывай его, присваивай переменной и работай.
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32494999
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автора что делает "xlsApp.SheetsInNewWorkbook = 1"?

О как!
а встать на этой строчке xlsApp.SheetsIn|NewWorkbook там где палочка стоит и F1 нажать не пробовали?

Делает она вот, что - приказывает Екселю новую книгу создавать,( когда кто-то в следующий раз на кнопку "создать" нажмет), в объеме одной страницы. (стандартно их там (в новой книге) три)
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32495010
tim2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а встать на этой строчке
о как: ну встал я, ну нажал F1....... находясь в Аксессе , и что я получил вместо справки?
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32495022
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор и что я получил вместо справки?

Эхь...,
Вам же СОВЕТ давали - на этапе отладки ссылку на ексель поставить, тохды не только IntelliSense, тохды ечЁ и Шправки ...
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32495681
CtrlAlt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
фыыф

иногда нужно дать пользователю несохраненный документ XLS

Можно проще сделать. Вместо
Set WBt = xlsApp.Workbooks.Open(FileName)

Сделать
Set WBt = xlsApp.Workbooks.Add(FileName). Здесь FileName выступает в качестве шаблона, на основе которого будет создан несохраненный пока документ. И после этого удалить сразу файл с шаблоном.
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32495834
tim2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот при таком коде не отрывается, в итоге ссылка на Ексель:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Dim xlBook As Object
Dim rst As Recordset
Dim XLS() As Byte
Set rst = CurrentDb.OpenRecordset( "TXLS" )
   
XLS = rst(FieldName).GetChunk( 0 , rst(FieldName).FieldSize)
Open  "C:\Temp\test.XLS"  For Binary Access Write As # 1 
Put # 1 , , XLS
Close # 1 
rst.Close
Set xlsApp = CreateObject( "Excel.Application" )
Set xlBook = xlsApp.Workbooks.Open( "C:\Temp\test.XLS" )
If xlBook Is Nothing Then
   MsgBox  "что-то не так" 
   Exit Function
End If
'тут должна быть обработка, которую я закомментировал, чтобы исключить какой-либо код'
Set xlBook = Nothing
Set xlsApp = Nothing
вроде два присвоения, два Nothing.
И как удалить файл с шаблоном? Инструкция Kill вызывает сообщения о блокировке шаблона.
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32496183
CtrlAlt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Excel у тебя остается открытым. Удаляя ссылки на него, ты не закрываешь его. Поэтому либо делай xlsApp.Visible=true с тем, чтобы пользователь сам закрыл его, либо xlsApp.Quit - программно закрывая Excel перед Nothing'ами.
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32496470
фыыф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 CtrlAlt
Set WBt = xlsApp.Workbooks.Add(FileName)

:0) си
(правда я уже и сам дотумкал создавать из шаблона).


зы:
забавное поведение шаблона:
1. пишу в него что-нить и открываю его (руками) в сеансе как файл для редактирования.
2. Вношу в файл шаблона изменения и сохраняю.
3. При открытии (руками) в другом сеансе для редактирования предупреждает о возможности открытия только для чтения.
4. Но при этом ёксель нормально пропускает перезапись файла шаблона не средствами XL (не смотря на то что "он" открыт в екселе на редактироование):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Public Function OpenXLS(oName As String, FileName As String) As Object
Dim xlsApp As Object ' Excel.Application '
    If Not SaveXLS(oName, FileName) Then
        MsgBox  "Шаблон "  & vbCr _
        & oName & vbCr _
        &  "Не найден" 
        Exit Function
    End If
    'откроем в новую несохраненную книгу
    Set xlsApp = CreateObject( "Excel.Application" )
    Set OpenXLS = xlsApp.Workbooks.Add(Template:=FileName)
End Function

содержимое в файле полностью обновляется, но ёксель не матерится.
т.е., получается, что Kill -ить буферный файл нет никакой нужды (только если хочется проверить, не занят ли он еще чем то)? "Блокировка" екселя при этом все таки мешает отредактировать файл руками из блокнота. Очень забавное поведение. Понять бы, что позволяет инструкциям
Код: plaintext
1.
2.
Open FileName For Binary Access Write As # 1 
Put # 1 , , XLS
Close # 1 

безконфликтно обойти блокировку файла ёкселем на изменение.


(хотя и тут есть какие-то фокусы, если файл не является файлом екселя (т.е. не сохранен как файл екселя), а именно в пустой (длиной 0), но открытый в XL-е файл оно писать не хочет, пока его не сохранишь как книгу эксель (или не пустой, но явно не эксельный, открытый в екселе как текстовый - до момента первого сохранения _как книги_)). Какие-то унутренние прибабахи. Получается, что уровень блокировки файла екселем (For Binary Access Write) зависит от типа файла (реального, а не расширения). т.е. от того, опознан ли он экселем как родной. И как только опознан, можно писать в него из внешнего (по отношению к екселю, в котором он открыт) процесса, открыв For Binary Access Write.
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32496528
CtrlAlt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tim2

На http://www.ctrlalt.nm.ru/AccessExcel.htm теперь есть пример. Можешь посмотреть

фыыф
Пока не понял фишку, надо подумать
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32496662
фыыф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ссуть нарно в том, штаа ексель файлы своего формата НЕ Открывает (фактически) для изменения (А всегда создает новые, помечая старый как заблокированный), и стал быть блокировка там несколько иного вида (чем блокировка файла, открытого на изменение). При доступе к нераспознанному (форматом) файлу он блокирует его полностью, вплоть до сохранения его в формате екселя (в этот момент тип блокировки сохраненного изменяется, а "рабочим" (отслеживающим изменения) становится временный файл).

Возможно разница блокировок аналогична разнице режимов работы с файлом при открытии как (Append|Output) vs (Binary|Input|Random)?
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32496701
CtrlAlt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему

фыыфт.е., получается, что Kill -ить буферный файл нет никакой нужды ?

А если пользователь не захочет сохранять отчет, то этот буферный файл ведь останется неприкаяный.
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32498013
tim2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 CtrlAlt:
А можно ли в указанном тобой примере (http://www.ctrlalt.nm.ru/AccessExcel.htm) сделать так, чтобы при открытии несохраненного пока листа(проц-ра "MakeXLS_2") его название было бы не "temp1". а что-то вразумительное? Чтобы, если пользователь выберет сохранение, имя файла уже было бы сформировано и осталось указать только папку. Т.е. после строки
Код: plaintext
Set WB = xlsApp.Workbooks.Add(OutPutch &  "temp.xls" )
поменять этой WB имя? Это не каприз - у нас название док-тов имеет определенный формат(формирует программа), а пользователи часто вводят его с ошибками.
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32498247
фыыф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторчтобы при открытии несохраненного пока листа его название было бы не "temp1". а что-то вразумительное

1. не следует путать имя листа (можно изменить .Name="NewName") и книги (Read Only, меняется само при сохранении xl.SaveAs filename:=NewPath & "NewName.xls"). Но тогда нет необходимости выгружать файл как шаблон, и создавать клон (методом .Add). Загружайте методом Open (выгрузив из таблицы в файл уже с требуемым окончательным именем, но, может быть, временным путем).

2. можно подгонять имя файла шаблона (ибо все равно во что-то его выгружаете), тогда " несохраненная пока книга" будет иметь необходимое имя + 1. С чем, видимо, надо мириться.
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32498930
tim2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пункт1 не понял: ...но, может быть, временным путем
Т.е., в примере, проц-ру "MakeXLS_2" не выполнять, а в проц-ру "MakeXLS_1" добавить что-то, что либо сразу гонит в нужную папку без открытия (что сейчас в прц-ре и происходит), либо гонит во временную папку и открывает?
1. диалога о сохранении не будет(если только посмотреть)
2. Kill без закрытия Екселя тоже не получится...
Может я и запутался, но что-то не выходит каменная чаша.
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32498955
tim2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
немного был не прав: вопрос о сохранении появляется, но, при согласии, не возникает диалога выбора папки - закрывается и все.
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32499024
tim2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изгалился так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
OutPutch = DLookup( "[Папка]" ,  "Установки" )
If Right(OutPutch,  1 ) <>  "\"  Then OutPutch = OutPutch &  "\" 
RepVid = DLookup( "[ВыводОтчетов]" ,  "Установки" )
strFileName = Имя_Файла(FileName) &  ".xls" 
If Not RepVid Then 'без показа'
TempName =  "temp.xls" 
Else 'с показом'
TempName = strFileName
End If

Set rst = CurrentDb.OpenRecordset( "TXLS" )
   'Записываем в файл'
XLS = rst(FieldName).GetChunk( 0 , rst(FieldName).FieldSize)
Open OutPutch & TempName For Binary Access Write As # 1 
Put # 1 , , XLS
Close # 1 
rst.Close
If Not RepVid Then
Call MakeXLS_1()
Else
Call MakeXLS_2()
End If
MakeXLS_1():
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Set xlsApp = CreateObject( "Excel.Application" )
Set WB = xlsApp.Workbooks.Open(OutPutch & TempName)
Set xlsSheet = WB.Sheets( 1 )
'Что-то делаем'
'Результирующий файл
FileName = OutPutch & strFileName

'Если уже был такой, то удаляем
If Dir(FileName) <>  "" Then Kill FileName
'Сохраняем под нужным именем'
WB.SaveAs FileName
me1:
'Выходим'
.............
'Удаляем шаблон'
If Dir(OutPutch & TempName) <> " " Then Kill OutPutch & TempName
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32499046
tim2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
MakeXLS_2():
Set xlsApp = CreateObject( "Excel.Application" )
Set WB = xlsApp.Workbooks.Open(OutPutch & TempName)
Set xlsSheet = WB.Sheets( 1 )
'Что-то делаем'
xlsApp.Visible = True
'Выходим'
.......
Здесь шаблон не удаляется. Вопрос о целевой папке не возникает, но док-нт попадает "куда надо".
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32499361
фыыф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 CtrlAlt

мдя, надумал и во 2-й акес втащить (было такое 16-и разрядное) всю энту технологию.
Однако грабли.
- типа Byte нет.
При
Put #1, , XLS
, как я вычислил, если XLS - строка, происходит облом с байтами: 0 - выгружаются как 32. (все остальное вроде вполне работает, с некоторыми правкой/допуском, ес-но). А тут не могу сообразить, как наобмануть. И побайтно пробовал читать/писать и прочая.
...
Рейтинг: 0 / 0
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #32500079
фыыф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
победил (и в Аксессе2.0),
был неправ в пределах читки байтов
если кому понадобиться:
Код: plaintext
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.
29.
30.
31.
'Вытаскивает шаблоны отчетов из бд
Function SaveXLS (oName As String, FileName As String) As Integer
Dim rst As Recordset, F As String, Db  As Database
Dim XLS As Integer'()  As Byte
    F =  "XL" 
    Set Db = CurrentDB()
    Set rst = Db.OpenRecordset( "TXLS" )
    rst.inDex =  "oName" 
    rst.Seek  "=" , oName
    If Not rst.NoMatch Then
        'Записываем в файл
        Dim ln As Long, i  As Long
        ln = rst(F).FieldSize()
        'XLS = rst(F).GetChunk( 0 , ln)
        '-----хер там 32<->0 почему - не понял
        Open FileName For Binary Access Write As #1
        ' -----побуквенно---
 
        For i =  0  To ln -  1 
            XLS = Asc(rst(F).GetChunk(i,  1 ))
            Put # 1 , i +  1 , XLS
        Next i
        '------
        'Put # 1 , , XLS
        Close # 1 
        SaveXLS = True
    Else
        SaveXLS = False
        Exit Function
    End If
    rst.Close
End Function
...
Рейтинг: 0 / 0
56 сообщений из 56, показаны все 3 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Из Аксесса в шаблон Екселя - есть ли надежный способ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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