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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2010, 17:46   #1
alvazor
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 122
По умолчанию открыть скриптом файл Excel

Здравствуйте, уважаемые!
Можно ли из скрипта открыть файл Excel, не активизируя предварительно приложение (т.е. как делаем с рабочего стола)? Желательно без API.
Exec открывает только приложения, Get только позволяет получить свойства... Как только ни пробовал - не идет.
Помогите, плиз!
alvazor вне форума Ответить с цитированием
Старый 03.06.2010, 18:52   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Укажете свой путь к файлу
Код:
Option Explicit

Dim  oBook, oExcel
Set oExcel = CreateObject("Excel.Application")
Set oBook= oExcel.Workbooks.Open ("C:\222.xls")
oExcel.Visible = True
Вложения
Тип файла: rar Как_рабочий стол.rar (243 байт, 29 просмотров)
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 03.06.2010, 19:07   #3
alvazor
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 122
По умолчанию

Спасибо, что откликнулись!
Такой вариант пробовал, не подходит -(
Мне надо именно открыть файл, чтобы вызывалась автоматом текущая сессия Excel.
Дело в том, что в 2003 sp3 версии по такой команде почему-то открывается файл, из которого установленная надстройка видна, а ее проект недоступен, и не открывается макрос Public надстройки
alvazor вне форума Ответить с цитированием
Старый 04.06.2010, 06:26   #4
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Дело в том, что в 2003 sp3 версии по такой команде почему-то открывается файл, из которого установленная надстройка видна, а ее проект недоступен, и не открывается макрос Public надстройки
Мне тоже приходилось сталкиваться с подобной проблемой. Для корректной работы надстроек, при нескольких открытых сессиях Excel 2003, в коде макросов, вызывающих процедуры надстройки, попробуйте указывать полный путь, не смотря на то, что надстройка считается всегда открытой. Например, запускать макрос "Макрос1", который находится в надстройке, не строкой
Код:
Макрос1
, а командой
Код:
Run "'C:\Program Files\МояНадстройка.xla'!Макрос1"
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 04.06.2010 в 08:31.
SAS888 вне форума Ответить с цитированием
Старый 04.06.2010, 09:53   #5
alvazor
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 122
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Мне тоже приходилось сталкиваться с подобной проблемой. Для корректной работы надстроек, при нескольких открытых сессиях Excel 2003, в коде макросов, вызывающих процедуры надстройки, попробуйте указывать полный путь, не смотря на то, что надстройка считается всегда открытой. Например, запускать макрос "Макрос1", который находится в надстройке, не строкой
Код:
Макрос1
, а командой
Код:
Run "'C:\Program Files\МояНадстройка.xla'!Макрос1"
Попробовал, что-то не пошло...
Вот полный текст скрипта с дополнениями для прямой адресации:

Nmb = "46000" ' изменяемая часть имени надстройки
Set objShellApp = CreateObject("Shell.Application")
Set FSO = CreateObject("Scripting.FileSystemO bject")
' ввел дополнительно для прямой адресации:
Set oShell = CreateObject("WScript.shell")


AddinTitle = "Calc_MKS" & Nmb
' ввел дополнительно для прямой адресации:
AddInsPath = oShell.ExpandEnvironmentStrings("%A PPDATA%\Microsoft\AddIns\")
AddInName = "Calc_MKS" & Nmb & ".xla"
AddinPath=AddInsPath & "\" & AddInName


On Error Resume Next
Set XL = GetObject(, "Excel.Application")
If Err.Number <> 0 Then
objShellApp.ShellExecute "excel.exe", , , , 3
WScript.Sleep 1500
Set XL = GetObject(, "Excel.Application")
else
XL.Workbooks.add
end if
With XL
if .Addins(AddinTitle).Installed = False Then
.Addins(AddinTitle).Installed =True
WScript.Sleep 1000
end if
WScript.Sleep 1000
.Run "StartCalc" & Nmb
' а этот вариант не срабатывает??:
'.Run 'AddinPath'!"StartCalc" & Nmb

End With

Ошибки в синтаксисе полного адреса вроде нет, и адрес точный.
В принципе, приведенный вариант работает, но как-то неустойчиво - задолбала необходимость применения Sleep-ов! Вот если бы иметь команды ожидания завершения, но таких что-то не найду
Кстати, когда пробовал CreteObject - в новой книге надстройка была видна, инсталлировалась, макрос запускался при первом пуске, а при последующих видимость надстройки оставалась, а проект в VBA пропадал ??
alvazor вне форума Ответить с цитированием
Старый 04.06.2010, 10:12   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
' а этот вариант не срабатывает??:
'.Run 'AddinPath'!"StartCalc" & Nmb
В кавычки нужно брать вместе с путем:
Код:
Run "'" & AddinPath & "'!StartCalc" & Nmb
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 04.06.2010, 10:54   #7
alvazor
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 122
По умолчанию

Пасиб, SAS888 и doober!
В редакции SAS888 команда заработала (у меня еще в пути лишний слэш, правда, в проге-то правильно, только в форуме не исправил)
Но синтаксис команды так и не понял, особенно первый "&".
Может теперь что подскажете вместо Sleep? В том же InnoSetup используется опция "ждать завершения", м.б. и какой-нить вариант в скриптах есть?
А то эти задержки мало того, что тормозят сами по себе, приходится их подгонять на быстродействие конкретных ПЭВМ, т.е. на самое медленное
alvazor вне форума Ответить с цитированием
Старый 04.06.2010, 11:14   #8
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Но синтаксис команды так и не понял, особенно первый "&".
В начале строки находится апостроф в кавычках. Затем сцепляем с переменной AddinPath (полный путь и имя файла надстройки с расширением), затем сцепляем с продолжением: апостроф, !, и т.д.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 04.06.2010, 11:45   #9
alvazor
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 122
По умолчанию

Спасибо, SAS888, теперь дошло!
А то от обилия кавычек в глазах зарябило!
alvazor вне форума Ответить с цитированием
Старый 04.06.2010, 16:56   #10
alvazor
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 122
По умолчанию

Прошу прощения за назойливость!
Теперь действительно при инсталлированной надстройке макрос стал запускаться без сбоев. Другая проблема - надстройка не инсталлируется при первом пуске скрипта. Правда, проявилось только в Win XP Sp2, в Sp3 и Vista - все нормально??
(команда в тексте выше - .Addins(AddinTitle).Installed =True)
Создается и открывается новый файл "Книга1", надстройка (не инсталлированная) в нем видна, вручную инсталлируется
И опять-таки проект надстройки в новой книге отсутствует!
Может и для инсталляции надо прямо адресоваться, а не по Title?
Подскажите, плиз!
alvazor вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Открыть из Delphi файл Excel masterdela Общие вопросы Delphi 5 30.03.2010 10:47
открыть файл Excel в пустой книге segail Microsoft Office Excel 1 29.03.2010 11:30
Как открыть файл? Xnarcotic Общие вопросы Delphi 4 14.06.2009 11:51
Как открыть файл в Excel globalhunter Общие вопросы Delphi 2 11.02.2008 01:30
Открыть файл dbClick-ом; Altera Помощь студентам 1 03.02.2008 15:40