powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Из Аксесса в шаблон Екселя - есть ли надежный способ?
25 сообщений из 56, страница 2 из 3
Из Аксесса в шаблон Екселя - есть ли надежный способ?
    #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
25 сообщений из 56, страница 2 из 3
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Из Аксесса в шаблон Екселя - есть ли надежный способ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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