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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2010, 16:01   #1
alvazor
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 122
По умолчанию открыть файл *.xls из скрипта

Здравствуйте, уважаемые
Вся надежда на профессионалов!
Это в продолжение темы
http://www.programmersforum.ru/showt...395#post545395
Требуется открыть скриптом файл *.xls - именно файл, чтобы вызывалось "родное" приложение.
Убивает, что из bat-файла - без проблем, например,

@CD %Desktop%
@CD %CD%\StartCalcExperiments
@start Calc_MKS46000.xls

Из скриптов, как только не пробовал - ни в какую!
Мне в конечном итоге надо запускать из скрипта макрос в надстройке.
Адресацию к нему прошли - см. ссылку.
Но при полном адресе макроса, когда создается новый экземпляр приложения, выпадает стандартное сообщение о наличии в надстройке макросов, что мне ни к чему (запрет прерываний и сообщений тут не действуют). При этом из файла, созданного вновь или открытого в новом экземпляре приложения, проект надстройки не виден, хотя сама надстройка в списке надстроек видна и доступна!?
Если же при вызове макроса надстройки уже имеется открытый файл *.xls - никаких проблем, ее макрос молча запускается.
Весь в надеждах...
alvazor вне форума Ответить с цитированием
Старый 11.06.2010, 16:12   #2
alvazor
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 122
По умолчанию

Дополнительный пример
Без проблем вызывается командная строка (cmd):
Set objShellApp = CreateObject("Shell.Application")
objShellApp.FileRun

Но что с ней дальше делать?
alvazor вне форума Ответить с цитированием
Старый 11.06.2010, 16:50   #3
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Скрипт vbs

Код:
Dim objExcel

ActivateExcel

'Set excelSheet1 = GetSheet(objExcel, "Sheet1") ' ищем книгу с таким листом, если не найдёна - будет ошибка скрипта

'objExcel.Workbooks.Add '# открываем новую книгу Excel
objExcel.Workbooks.open ("C:\Documents and Settings\user\Desktop\post_130610.xls") '# открываем книгу Excel

Private Function ActivateExcel()
On Error resume next 
Set objExcel = GetObject(, "Excel.Application")
If objExcel Is Nothing Then
  Set objExcel = CreateObject("Excel.Application")
  objExcel.Visible = True
End If
End Function

'The GetSheet method returns an Excel Sheet according to the sheetIdentifier
'ExcelApp - the Excel application which is the parent of the requested sheet
'sheetIdentifier - the name or the number of the requested Excel sheet
'return Nothing on failure
Function GetSheet(ExcelApp, sheetIdentifier) 'As Excel.worksheet
    On Error Resume Next
    Set GetSheet = ExcelApp.Worksheets.Item(sheetIdentifier)
    On Error GoTo 0
End Function
Что-то я позабыл вначале, что надо не новую... ну это несложно переделать - заменил строку.
Ну и всё, что относится к GetSheet() - тут просто для примера, для задачи не нужно.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 11.06.2010 в 17:30.
Hugo121 вне форума Ответить с цитированием
Старый 15.06.2010, 09:56   #4
alvazor
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 122
По умолчанию

Спасибо, Hugo, но, похоже, таким способом задача не решается...
Функция GetSheet() может найти только уже открытый (активный) файл и, соответственно, родительский экземпляр Excel находится функцией ActivateExcel() для этого открытого файла. В ином случае идет ветка функции ActivateExcel() с командой CreateObject("Excel.Application") и образует новый экземпляр Excel.
В этой ветке и проблема!
Вот когда открываешь любой файл *.xls вручную, тогда автоматом активируется "родной" экземпляр Excel, в котором доступны проекты vba всех созданных в нем файлов, включая надстройки. А в "новых" экземплярах Excel надстройки видны в списке надстроек, но их проекты не видны. Соответственно, чтобы запустить макрос надстройки, надо к нему адресоваться полным путем, при этом система выдает предупреждение о наличии в адресуемой надстройке макросов... При пуске макроса надстройки из "родного" экземпляра, такого предупреждения нет (естественно, если в системе безопасности установлен флажок "доверять доступ к проектам...")
В конце-концов меня бы устроил и вариант запуска из скрипта bat - файла (см. выше - 3 строчки), но как его запустить из скрипта?
alvazor вне форума Ответить с цитированием
Старый 15.06.2010, 10:47   #5
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Да, сейчас проверил пристальнее - если Эксель открыт, то новый файл открывается в этом Экселе - вроде всё в порядке, PERSONAL.XLS доступен (надстроек у меня нет). Но если Эксель не открыт, то открывается Эксель без открытия PERSONAL.XLS
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 15.06.2010, 12:00   #6
alvazor
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 122
По умолчанию

Вариант:
'на рабочем столе открываем файл Proba.xls в установленной
'по умолчанию сессии (ProgID) Excel
Код:
Set objShellApp = CreateObject("Shell.Application")
Set objShell = CreateObject("WScript.shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")

FolderPath = objShell.SpecialFolders("Desktop") 
FileName = "Proba.xls"
FilePath = FolderPath & "\" & FileName

Set File = objFSO.GetFile(FilePath)

objShellApp.ShellExecute File.name, "",FolderPath,"open", 10
WScript.Sleep 2000
Set objExcel = GetObject(, "Excel.Application")
'не шибко понятно, но работает -)

Последний раз редактировалось Stilet; 15.06.2010 в 12:27.
alvazor вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передать xls -файл по почте valerij Microsoft Office Excel 5 29.12.2009 10:06
Кто возьмется перекачать файл txt в xls за вознаграждение?? himera Microsoft Office Access 3 14.02.2009 13:09
Помогите с настройкай скрипта mlm (буквально один файл) YurecLB Помощь студентам 3 02.02.2009 20:09
Найти файл *.xls содержащий определенный текст EfDim Microsoft Office Excel 5 19.01.2009 16:22
как присвоить значение ячейки R1C1 из 1.xls, допустим какой-нибудь любой ячейке из 2.xls ? diabloskrk Microsoft Office Excel 3 08.10.2007 12:27