Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.08.2014, 10:39   #1
ЕвгенийА86
 
Регистрация: 08.07.2014
Сообщений: 5
По умолчанию Повторное открытие книги после сохранения

Добрый день, уважаемые форумчане. Обращаюсь к вам за помощью, так как неделю бьюсь над тем как повторно открыть только что сохраненную книгу ексель. Написал программу для контроллера, связал ее со скада-системой WinCC, в которой есть функции VBS. Так вот, при нажатии кнопки скрипт должен выдать оператору отчет. В форме отчета (Excel 2003) используется надстройка для отображения числа прописью. Так вот в этом и главная загвоздка.
Без этой надстройки можно было бы сразу оставить документ открытым, без автоматического сохранения, оператор ввел бы доп. информацию и закрыл бы книгу, сохранив ее. Но в данном случае не работает надстройка и не прописывает числа прописью.
Если же файл сохраняется выполнением скрипта, то при открытии книги все отображается как нужно, надстройка работает.

Вопрос, как нужно дополнить код, что бы книга открывалась, после ее сохранения. Оператор может вывести сразу несколько отчетов, нажав на кнопку, нужно чтобы каждый документ открылся после его сохранения.

ниже приведен код, думаю в нем все понятно...

Код:
Sub OnLButtonDown(Byval Item, Byval Flags, Byval x, Byval y)                                                                                                                                                         


Dim objExcelApp
Dim caption	'имя файла
rem имя книги
	caption=Now 'берем текущую дату и время
	
	
	caption=Replace(caption,"\",".",1,-1)' заменяем запрещенные символы разрешенными для сохранения
	caption=Replace(caption,":","_",1,-1)+"_PET4"+".xls"' заменяем и формируем имя файла

Set objExcelApp = CreateObject("Excel.Application")'открываем ексель

objExcelApp.Visible = True' делаем видимым

objExcelApp.Workbooks.Open "C:\\Uchet 1\форма для накладной PET4.xls"' открываем форму

   
objExcelApp.Worksheets ("ЛИСТ2").Cells(4,9).value = ScreenItems("IOField4").OutputValue' заносим в ячейку значение 
objExcelApp.Worksheets ("Лист2").Cells(4,10).value = ScreenItems("IOField10").OutputValue
objExcelApp.Worksheets ("Лист2").Cells(4,11).value = ScreenItems("IOField16").OutputValue

objExcelApp.ActiveWorkbook.SaveAs "C:\Otchety\PET4\"+caption  ' сохраняем книгу в папку под именем  (дата+время)
  

rem objExcelApp.ActiveWorkbook.Save
objExcelApp.Workbooks.Close

objExcelApp.Quit

Set objExcelApp = Nothing


End Sub
С уважением, Евгений.
ЕвгенийА86 вне форума Ответить с цитированием
Старый 01.08.2014, 15:04   #2
ЕвгенийА86
 
Регистрация: 08.07.2014
Сообщений: 5
По умолчанию

Хотя бы навести на мысль, как это можно сделать.
ЕвгенийА86 вне форума Ответить с цитированием
Старый 04.08.2014, 17:13   #3
vefer
Форумчанин
 
Регистрация: 11.10.2010
Сообщений: 134
По умолчанию

А что ее обязательно закрывать, чтобы надстройка сработала?
vefer вне форума Ответить с цитированием
Старый 04.08.2014, 17:43   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Мысль такая - создавайте/открывайте книгу сразу в ранее открытом экселе (где уже подключена надстройка), например где-то так:
Код:
Dim objExcel

ActivateExcel

Set wb = objExcel.Workbooks.Open ("C:\test.xls")
wb.Application.OnTime Now, "Macro1"

Private Function ActivateExcel()
On Error resume next 
Set objExcel = GetObject(, "Excel.Application")
If objExcel Is Nothing Then
   Set objExcel = CreateObject("Excel.Application")
   objExcel.Visible = false 'True
End If
End Function
или в созданном объекте открывайте надстройку.
Например:

Код:
Dim objExcel

ActivateExcel

objExcel.Workbooks.Add

Private Function ActivateExcel()
On Error resume next 
Set objExcel = GetObject(, "Excel.Application")
If objExcel Is Nothing Then
   Set objExcel = CreateObject("Excel.Application")
   objExcel.Workbooks.Open ("C:\Documents and Settings\юзер\Application Data\Microsoft\Excel\XLSTART\PERSONAL.XLS")
   objExcel.Visible = True
End If
End Function
Глубже не вникал.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 04.08.2014 в 17:48.
Hugo121 вне форума Ответить с цитированием
Старый 04.08.2014, 23:40   #5
RAN.
Форумчанин
 
Аватар для RAN.
 
Регистрация: 05.07.2011
Сообщений: 208
По умолчанию

Цитата:
Сообщение от ЕвгенийА86 Посмотреть сообщение
Хотя бы навести на мысль, как это можно сделать.
Продублировать код функции "число прописью" в вашей программе.
И никакой головной боли.
RAN. вне форума Ответить с цитированием
Старый 05.08.2014, 11:38   #6
ЕвгенийА86
 
Регистрация: 08.07.2014
Сообщений: 5
По умолчанию

HUGO121, почему то по вашему примеру ничего не прошло, выпадает ошибка на описание function.

RAN, по вашей наводке вставляю AddIns("Excellerator").Installed = true

Код:
Sub OnLButtonDown(Byval Item, Byval Flags, Byval x, Byval y)                                                                                                                                                         


Dim objExcelApp
Dim caption	'имя файла
rem имя книги
	caption=Now 'берем текущую дату и время
	
	
	caption=Replace(caption,"\",".",1,-1)' заменяем запрещенные символы разрешенными для сохранения
	caption=Replace(caption,":","_",1,-1)+"_PET4"+".xls"' заменяем и формируем имя файла

Set objExcelApp = CreateObject("Excel.Application")'открываем ексель

objExcelApp.Visible = True' делаем видимым

objExcelApp.Workbooks.Open "C:\\Uchet 1\форма для накладной PET4.xls"' открываем форму

AddIns("Excellerator").Installed = true
   
objExcelApp.Worksheets ("ЛИСТ2").Cells(4,9).value = ScreenItems("IOField4").OutputValue' заносим в ячейку значение 
objExcelApp.Worksheets ("Лист2").Cells(4,10).value = ScreenItems("IOField10").OutputValue
objExcelApp.Worksheets ("Лист2").Cells(4,11).value = ScreenItems("IOField16").OutputValue

objExcelApp.ActiveWorkbook.SaveAs "C:\Otchety\PET4\"+caption  ' сохраняем книгу в папку под именем  (дата+время)
  

rem objExcelApp.ActiveWorkbook.Save
rem objExcelApp.Workbooks.Close

rem objExcelApp.Quit

Set objExcelApp = Nothing


End Sub
и теперь открывается только шаблон, С РАБОТАЮЩЕЙ надстройкой, но не идет дальнейшее выполнение скрипта по занесению данных и сохранению книги под именем в папку. что за коллизия...
ЕвгенийА86 вне форума Ответить с цитированием
Старый 05.08.2014, 13:15   #7
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

У меня ничего не выпадает.
Вы функцию надеюсь не внутрь процедуры кладёте?
Покажите целиком весь свой код. Я показывал как это работает в vbs - а что там у Вас?
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 05.08.2014, 13:52   #8
ЕвгенийА86
 
Регистрация: 08.07.2014
Сообщений: 5
По умолчанию

Hugo121, вообщем то в первом посте и есть весь мой код... я пытался открыть надстройку "сумма-прописью", называется она Excelerator, лежит в папке (c:\Program Files\Microsoft Office\OFFICE11\Library\MYXAS32.XLL ). вставлял второй отрывок кода, и указывал данный путь.

PS с VBS имею дело в первые, в течении прошедших двух недель, не профессионал...мог что то и напутать. предыдущий код получил путем, материалов-примеров, найденных на этом сайте.

а вот вопрос, почему же не идет дальнейшее выполнение скрипта, после вставки функции:
Код:
AddIns("Excellerator").Installed = true
.
форму то он открыл с включенной надстройкой(до этого открывал без выполнения надстройки, в ячейках отображалось #Имя?), а вот сохранение под заданным именем (дата+время) в указанную папку не выполняется?

Последний раз редактировалось ЕвгенийА86; 05.08.2014 в 13:56.
ЕвгенийА86 вне форума Ответить с цитированием
Старый 05.08.2014, 14:09   #9
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Цитата:
а вот сохранение под заданным именем (дата+время) в указанную папку не выполняется
время содержит : которыми разделены часы, минуты, секунды.
у файловой системы есть ограничения на использование некоторых символов в именах файлов. двоеточие относится к запрещенным символам.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 05.08.2014, 14:16   #10
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Так это макрос или vbs или что? То, что показали - на vbs не похоже. Что как происходит - мне не понятно...
Но думаю ошибка потому, что в этом экземпляре Экселя, который создаёте (зачем?) нет надстройки с кодом "прописи" - нужно или не создавать Эксель, а использовать открытый, или в созданном открыть надстройку.
Что я и показал в варианте vbs - для макроса это лишнее, там и так по умолчанию открыт Эксель и надстройка.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Повторное открытие окон - ошибка Access Violation delphicoding Общие вопросы Delphi 23 07.12.2011 12:56
Повторное открытие открытой формы. segail Microsoft Office Excel 12 20.10.2010 18:12
Повторное открытие сообщений segail Microsoft Office Excel 8 02.07.2010 20:22
Повторное открытие файла txt для редактирования в delphi Shaggrath Помощь студентам 8 20.07.2009 13:36
Проверка на повторное открытие ЯИмя Microsoft Office Excel 4 13.08.2008 18:02