Добрый день. Требуется запускать определенный файл Excel сразу с включенными макросами, игнорируя настройки безопасности. При этом на компьютере установлены сразу две версии Office 2003 и 2007. Для открытия указанного файла нужно использовать версию 2007, для выполнения вышеизложенных требований использую скрипт со следующим кодом:
[vba]
Код
launchshell Sub launchshell() Dim objXL Dim Secur Dim sFilePath Dim sExcelPath Dim WshShell Dim xlBook
Проблема в следующем - если во время запуска скрипта Excel был полностью закрыт - все проходит хорошо, никаких ошибок не возникает, но если Excel был открыт с любым другим документом (1 и более), скрипт кроме требуемого файла запускает и оставляет открытой еще одну пустую книгу, что как минимум не приятно, как максимум на некоторых компьютерах нужный файл сваливается в фон, а пустая книга становится активной и не осведомленный пользователь иногда вообще не понимает, что произошло....
Прошу Вас подсказать/рассказать, что сделано не так, где, что и как нужно поменять, чтобы исправить ситуацию? Спасибо.
Добрый день. Требуется запускать определенный файл Excel сразу с включенными макросами, игнорируя настройки безопасности. При этом на компьютере установлены сразу две версии Office 2003 и 2007. Для открытия указанного файла нужно использовать версию 2007, для выполнения вышеизложенных требований использую скрипт со следующим кодом:
[vba]
Код
launchshell Sub launchshell() Dim objXL Dim Secur Dim sFilePath Dim sExcelPath Dim WshShell Dim xlBook
Проблема в следующем - если во время запуска скрипта Excel был полностью закрыт - все проходит хорошо, никаких ошибок не возникает, но если Excel был открыт с любым другим документом (1 и более), скрипт кроме требуемого файла запускает и оставляет открытой еще одну пустую книгу, что как минимум не приятно, как максимум на некоторых компьютерах нужный файл сваливается в фон, а пустая книга становится активной и не осведомленный пользователь иногда вообще не понимает, что произошло....
Прошу Вас подсказать/рассказать, что сделано не так, где, что и как нужно поменять, чтобы исправить ситуацию? Спасибо.hripunkov
Добрый день! Отдельно запускать EXCEL.EXE не нужно (это и будет вашей лишней "пустой книгой").
[vba]
Код
launchshell
Sub launchshell() Dim sFilePath, xlBook, objXL, Secur sFilePath = replace(Wscript.ScriptFullName,Wscript.ScriptName,"Имя-Файла.xlsm") Set xlBook = GetObject(sFilePath) Set objXL = xlBook.Application objXL.Visible = True secur = objXL.AutomationSecurity objXL.AutomationSecurity = 1 xlBook.Close False objXL.Workbooks.Open sFilePath,,,,"4321" objXL.AutomationSecurity = secur End Sub
[/vba]
Но, по-уму, лучше так (без лишних "телодвижений")
[vba]
Код
launchshell
Sub launchshell() Dim sFilePath, objXL, Secur ' получаем полный путь к файлу "Имя-Файла.xlsm", который нужно открыть с поддержкой работы макроса, независимо от настройки безопасности ' (файл "Имя-Файла.xlsm" должен лежать в этой же папке, рядом со скриптом) sFilePath = Replace(Wscript.ScriptFullName, Wscript.ScriptName, "Имя-Файла.xlsm") Set objXL = CreateObject("Excel.Application") ' получаем указатель на Application objXL.Visible = True ' делаем окно Excel видимым Secur = objXL.AutomationSecurity ' запоминаем текущие настройки безопасности objXL.AutomationSecurity = 1 ' устанавливаем низкий уровень безопасности objXL.Workbooks.Open sFilePath, , , , "4321" ' открываем эту же книгу использую пароль "4321" objXL.AutomationSecurity = Secur ' восстанавливаем настройки безопасности, как было End Sub
[/vba]
Добрый день! Отдельно запускать EXCEL.EXE не нужно (это и будет вашей лишней "пустой книгой").
[vba]
Код
launchshell
Sub launchshell() Dim sFilePath, xlBook, objXL, Secur sFilePath = replace(Wscript.ScriptFullName,Wscript.ScriptName,"Имя-Файла.xlsm") Set xlBook = GetObject(sFilePath) Set objXL = xlBook.Application objXL.Visible = True secur = objXL.AutomationSecurity objXL.AutomationSecurity = 1 xlBook.Close False objXL.Workbooks.Open sFilePath,,,,"4321" objXL.AutomationSecurity = secur End Sub
[/vba]
Но, по-уму, лучше так (без лишних "телодвижений")
[vba]
Код
launchshell
Sub launchshell() Dim sFilePath, objXL, Secur ' получаем полный путь к файлу "Имя-Файла.xlsm", который нужно открыть с поддержкой работы макроса, независимо от настройки безопасности ' (файл "Имя-Файла.xlsm" должен лежать в этой же папке, рядом со скриптом) sFilePath = Replace(Wscript.ScriptFullName, Wscript.ScriptName, "Имя-Файла.xlsm") Set objXL = CreateObject("Excel.Application") ' получаем указатель на Application objXL.Visible = True ' делаем окно Excel видимым Secur = objXL.AutomationSecurity ' запоминаем текущие настройки безопасности objXL.AutomationSecurity = 1 ' устанавливаем низкий уровень безопасности objXL.Workbooks.Open sFilePath, , , , "4321" ' открываем эту же книгу использую пароль "4321" objXL.AutomationSecurity = Secur ' восстанавливаем настройки безопасности, как было End Sub
Не подходит такой вариант... У меня проблема с выбором версии Excel, в Вашем варианте у меня будет вызываться только Excel 2003 - почему так? А вот не знаю )) Но именно так, пока жестко не привяжешь скрипт к вызову 2007 ничего не получается....
Не подходит такой вариант... У меня проблема с выбором версии Excel, в Вашем варианте у меня будет вызываться только Excel 2003 - почему так? А вот не знаю )) Но именно так, пока жестко не привяжешь скрипт к вызову 2007 ничего не получается....hripunkov
RAN, Так и есть. А это запрещено? Там я не нашел решения вопроса, пришел сюда. Я хочу найти ответ, и так как сам решить проблему не могу создал вопрос на тематических форумах. Ведь именно так делают люди? ))
RAN, Так и есть. А это запрещено? Там я не нашел решения вопроса, пришел сюда. Я хочу найти ответ, и так как сам решить проблему не могу создал вопрос на тематических форумах. Ведь именно так делают люди? ))hripunkov
Сообщение отредактировал hripunkov - Воскресенье, 09.08.2015, 12:17
Да неужели? Вы сами-то статью читали? Что бы Excel 2003 открыл файл четырехбуквенного формата НЕОБХОДИМО УСТАНОВИТЬ КОНВЕРТЕР Дайте ссылку на пост, в котором Вы указали что у Вас установлен SP3
Да неужели? Вы сами-то статью читали? Что бы Excel 2003 открыл файл четырехбуквенного формата НЕОБХОДИМО УСТАНОВИТЬ КОНВЕРТЕР Дайте ссылку на пост, в котором Вы указали что у Вас установлен SP3Serge_007
И этот конвертер поддерживает 4буквы лишь частично - кнопки обычно не работают, миллионов строк/столбцов естественно не будет. А по поводу темы: когда по три страницы минимум на трёх форумах - не мудрено запутаться в ответах. И не понятно что именно нужно сделать - если нужно открыть определённый файл в определённом экселе, и чтоб в файле работали макросы - это одна задача. Если нужно открыть определённый файл в определённом экселе, и чтоб в этом экселе работали макросы - это задача другая. Похоже что интересует первый вариант - а для этого не нужно отключать эту секурити, и об этом уже говорилось пару раз на разных форумах в этой теме. Достаточно просто открыть файл скриптом.
И этот конвертер поддерживает 4буквы лишь частично - кнопки обычно не работают, миллионов строк/столбцов естественно не будет. А по поводу темы: когда по три страницы минимум на трёх форумах - не мудрено запутаться в ответах. И не понятно что именно нужно сделать - если нужно открыть определённый файл в определённом экселе, и чтоб в файле работали макросы - это одна задача. Если нужно открыть определённый файл в определённом экселе, и чтоб в этом экселе работали макросы - это задача другая. Похоже что интересует первый вариант - а для этого не нужно отключать эту секурити, и об этом уже говорилось пару раз на разных форумах в этой теме. Достаточно просто открыть файл скриптом.Hugo
Для открытия указанного файла нужно использовать версию 2007
Тогда, попробуйте так:
[vba]
Код
launchshell
Sub launchshell() Dim sFilePath, objXL, Secur ' получаем полный путь к файлу "Имя-Файла.xlsm", который нужно открыть с поддержкой работы макроса, независимо от настройки безопасности ' (файл "Имя-Файла.xlsm" должен лежать в этой же папке, рядом со скриптом) sFilePath = Replace(Wscript.ScriptFullName, Wscript.ScriptName, "Имя-Файла.xlsm") Set objXL = CreateObject("Excel.Application.12") ' получаем указатель на Application v12.0 (Excel 2007) objXL.Visible = True ' делаем окно Excel видимым Secur = objXL.AutomationSecurity ' запоминаем текущие настройки безопасности objXL.AutomationSecurity = 1 ' устанавливаем низкий уровень безопасности objXL.Workbooks.Open sFilePath, , , , "4321" ' открываем эту же книгу использую пароль "4321" objXL.AutomationSecurity = Secur ' восстанавливаем настройки безопасности, как было End Sub
Для открытия указанного файла нужно использовать версию 2007
Тогда, попробуйте так:
[vba]
Код
launchshell
Sub launchshell() Dim sFilePath, objXL, Secur ' получаем полный путь к файлу "Имя-Файла.xlsm", который нужно открыть с поддержкой работы макроса, независимо от настройки безопасности ' (файл "Имя-Файла.xlsm" должен лежать в этой же папке, рядом со скриптом) sFilePath = Replace(Wscript.ScriptFullName, Wscript.ScriptName, "Имя-Файла.xlsm") Set objXL = CreateObject("Excel.Application.12") ' получаем указатель на Application v12.0 (Excel 2007) objXL.Visible = True ' делаем окно Excel видимым Secur = objXL.AutomationSecurity ' запоминаем текущие настройки безопасности objXL.AutomationSecurity = 1 ' устанавливаем низкий уровень безопасности objXL.Workbooks.Open sFilePath, , , , "4321" ' открываем эту же книгу использую пароль "4321" objXL.AutomationSecurity = Secur ' восстанавливаем настройки безопасности, как было End Sub
Set objXL = CreateObject("Excel.Application.12") ' получаем указатель на Application v12.0 (Excel 2007)
не знаю почему, но в моем случае это не помогает и все равно открывается 2003. к слову сказать, что в нормальном режиме (т.е. запуск без скрипта) файлы типа .xlsm запускают именно 2007 версию... вот такое странное поведение
Set objXL = CreateObject("Excel.Application.12") ' получаем указатель на Application v12.0 (Excel 2007)
не знаю почему, но в моем случае это не помогает и все равно открывается 2003. к слову сказать, что в нормальном режиме (т.е. запуск без скрипта) файлы типа .xlsm запускают именно 2007 версию... вот такое странное поведениеhripunkov
Сообщение отредактировал hripunkov - Воскресенье, 09.08.2015, 15:43