Запуск excel в одном процессе

  • Remove From My Forums
  • Вопрос

  • Добрый день!<o:p></o:p>

    Существует порядка 450 станций в основном windows 7(3264). На них установлен полный Office 2010 и компонент Imaging 2007. На большинстве
    станций файлы Excel открываются  в одном окне. К сожалению, есть достаточно большой процентстанций, пока прядка 50, где файлы Excel открываются по умолчанию в разных окнах и разных процессах, но межпроцессорные связи в них работают.
    Пример. Имеется 2 документа Excel tab1 и tab2, открытых в 2 разных процессах, причем открываются двойным щелчком сразу в разных процессах(как будто мы 2 раза запустили Excel и в каждом окне открыли по документу).
    При выборе функции «Вставить сводную таблицу» в документе tab1 появляется окно «Создание сводной таблицы». В документе tab2, открытом во другом процессе, можно выделять область данных, причем в строчке
    документа tab1 «Выбрать таблицу или диапазон» происходит отображения диапазона, выбранного в документе tab2.  Все установки дефолтные. Скажу больше, при установке профиля нового пользователя данная ситуация не повторяется. Т.е. если
    открывать документы по умолчанию можно только в одном процессе. Если документы Excel
    tab1 и ефи2 открывать разных процессах, то вставляя сводную таблицу в документе
    tab1, мы пытаемся выделить область в
    tab2 — в строке  «Выбрать таблицу или диапазон» документа
    tab1 мы не видим выделяемый диапазон. Опробовал все советы по всем форумам.
    Результат нулевой. Прошу официального ответа на несколько вопросов специалистов Microsoft.<o:p></o:p>

    1. Является ли открывание двойным щелчком документов сразу в разных окнах и процессах нормальным или это такой багглюк?<o:p></o:p>

    2.  Является ли возможность работы со связанными таблицами в документах, открытых в разных процессах, нормальным
    явлением или это такой багглюк?<o:p></o:p>

    3. Если такое поведение нормальное, то как мне его добиться на всех станциях?<o:p></o:p>

    • Изменено

      4 июня 2013 г. 8:42

Ответы

  • Здравствуйте Николай,

    Найдите следующий раздел реестра: HKEY_CLASSES_ROOTExcel.Sheet.12shellOpencommand. Разверните узел Command, дважды щелкните запись Default и проверьте значение Office 2010: «C:Program FilesMicrosoft OfficeOffice14EXCEL.EXE» /dde или «%1». Проверьте
    наличиеотсутствие раздела ddeexec2. Аналогичным образом проверьте раздел для резервного копирования раздел реестра HKEY_CLASSES_ROOTExcel.Sheet.8shellOpen.

    Значение «%1» — позволяет открывать документы Excel в двух разных окнах.

    Значение /dde — устанавливаемое при чистой установке пакета Office 2010.

    Сравните значения реестра на компьютере, где документы открываются в двух разных окнах, со значением этих же разделов на компьютерах, где документы открываются в одном окне.

    Напишите результат.


    Да, я Жук, три пары лапок и фасеточные глаза :))

    • Предложено в качестве ответа
      Иван ПродановMicrosoft contingent staff, Moderator
      4 июня 2013 г. 11:04
    • Помечено в качестве ответа
      ЖукMVP, Moderator
      5 июня 2013 г. 7:20

Приходилось ли вам когда-нибудь по несколько минут ждать пока в вашей книге Excel отработает макрос, обновится запрос Power Query или пересчитаются тяжелые формулы? Можно, конечно, заполнить случившуюся паузу чайком-кофейком на вполне законных основаниях, но наверняка вам приходила в голову и другая мысль: а не открыть ли рядом другую книгу Excel и не не поработать ли пока с ней?

Но всё не так просто.

Если вы открываете несколько файлов Excel обычным образом (двойным щелчком мыши в Проводнике или через меню Файл — Открыть в Excel), то они автоматически открываются в одном и том же экземпляре программы Microsoft Excel. Соответственно, если запустить пересчёт или макрос в одном из таких файлов, то занято будет всё приложение и зависнут все открытые книги, т.к. системный процесс Excel у них общий.

Решается эта проблема достаточно просто — нужно запустить Excel в новом отдельном процессе. Он будет независим от первого и позволит вам спокойно работать с другими файлами, пока предыдущий экземпляр Excel параллельно трудится над тяжелой задачей. Сделать это можно несколькими способами, причем некоторые из них могут работать или не работать в зависимости от вашей версии Excel и установленных обновлений. Так что пробуйте всё по очереди.

Способ 1. Лобовой

Самый простой и очевидный вариант — выбрать в главном меню Пуск — Программы — Excel (Start — Programs — Excel). К сожалению, работает такой примитивный подход только в старых версиях Excel.

Способ 2. Средняя кнопка мыши или Alt

Как открыть новый Excel

  1. Щёлкните правой кнопкой мыши по иконке Excel на панели задач — откроется контекстное меню со списком последних файлов.
  2. В нижней части этого меню будет строка Excel — щёлкните по ней левой кнопкой мыши, удерживая при этом клавишу Alt.

Должен запуститься ещё один Excel в новом процессе. Также вместо щелчка левой кнопкой с Alt можно использовать среднюю кнопку мыши — если на вашей мышке она есть (или нажимное колесико выполняет её роль).

Способ 3. Командная строка

Выберите в главном меню Пуск — Выполнить (Start — Run) или нажмите сочетание клавиш Win+R. В появившемся поле введите команду:

Запуск нового экземпляра Excel через командную строку

После нажатия на ОК должен запуститься новый экземпляр Excel в отдельном процессе.

Способ 4. Макрос

Это вариант чуть сложнее, чем предыдущие, но работает в любой версии Excel по моим наблюдениям:

  1. Открываем редактор Visual Basic через вкладку Разработчик — Visual Basic (Developer — Visual Basic) или сочетанием клавиш Alt + F11. Если вкладки Разработчик не видно, то отобразить её можно через Файл — Параметры — Настройка ленты (File — Options — Customize Ribbon).
  2. В окне Visual Basic вставляем новый пустой модуль для кода через меню Insert — Module.
  3. Копируем туда следующий код:
Sub Run_New_Excel()
    Set NewExcel = CreateObject("Excel.Application")
    NewExcel.Workbooks.Add
    NewExcel.Visible = True
End Sub

Если запустить теперь созданный макрос через Разработчик — Макросы (Developer — Macro) или сочетанием клавиш Alt+F8, то будет создан отдельный экземпляр Excel, как мы и хотели.

Для удобства, приведенный выше код можно добавить не в текущую книгу, а в Личную Книгу Макросов и вынести для этой процедуры отдельную кнопку на панель быстрого доступа — тогда эта возможность будет у вас всегда под рукой.

Способ 5. Файл сценария VBScript

Этот способ похож на предыдущий, но использует VBScript — сильно упрощенный вариант языка Visual Basic для выполнения простых действий прямо в Windows. Чтобы его использовать делаем следующее:

Сначала включаем отображение расширений для файлов в Проводнике через Вид — Расширения файлов (View — File Extensions):

Включаем показ расширений файлов

Затем создаем в любой папке или на рабочем столе текстовый файл (например NewExcel.txt) и копируем туда следующий код на VBScript:

Set NewExcel = CreateObject("Excel.Application")
NewExcel.Workbooks.Add
NewExcel.Visible = True
set NewExcel = Nothing

Сохраняем и закрываем файл, а затем меняем его расширение с txt на vbs. После переименования появится предупреждение, с которым надо согласиться, и у файла изменится иконка:

Файл VBScript

Всё. Теперь двойной щелчок левой кнопкой мыши по этому файлу будет запускать новый независимый экземпляр Excel, когда он вам потребуется.

P.S.

Помните о том, что кроме плюсов, запуск нескольких экземпляров Excel имеет и минусы, т.к. эти системные процессы друг друга «не видят». Например, вы не сможете сделать прямую ссылку между ячейками книг в разных Excel. Также будут сильно ограничены возможности копирования между различными экземплярами программы и т.д. В большинстве случаев, однако, это не такая уж большая плата за возможность не терять время в ожидании.

Ссылки по теме

  • Как уменьшить размер файла и ускорить его
  • Что такое Личная Книга Макросов, как её использовать

Запуск нового экземпляра Excel


Краткое описание

В статье описывается пример команды и скрипта для запуска нового (параллельного) приложения Excel, позволяющего работать независимо от состояния исходного файла.

Подробное описание

Приходилось ли вам, работая в Excel, сталкиваться с ситуацией, когда пересчет формул в вашем файле, работа макроса или какое-либо обновление/загрузка данных «подвешивали» Excel на столько, что либо идти пить чай в ожидании окончания обновления либо закрывать приложение через диспетчер задач?

Кто сталкивался, знает — ситуация досадная, т.к. работа может простаивать из-за того, что приходится ждать окончания запущенного процесса excel прежде чем появится возможность работать с другими excel файлами.

В справке Microsoft на эту тему есть вполне рабочее решение — запуск нового экземпляра (отдельного процесса) Excel из командной строки. Например так: excel.exe /x «C:UsersAdminDesktopМойФайл.xlsx» или для открытия пустого файла: excel.exe /x

Указанное выше решение очень даже рабочее. С одной лишь оговоркой. Новое приложение (новый процесс) станет доступно для работы только, когда «отвиснет» старое. Либо вам нужно сперва запустить новый экземпляр Excel одной из указанных выше команд и только потом запускать ваш «тяжелый» пересчет в исходном файле.

Если же так произошло, что важный пересчет уже запущен, а Excel нужен срочно, предлагаю небольшой vbs скрипт (см. файл выше). Просто распакуйте файл «new_excel.vbs» из архива и запустите его двойным кликом или через Enter. Запускать скрипт можно в любое время, не дожидаясь окончания работы (доступности) исходного файла.


Указанный выше синтаксис командной строки или код скрипта можно очень легко применять в макросах VBA. Тем самым, делая интересные в плане реализации вещи независимо от занятости/загруженности исходного файла (потока данных).

Также важно не забывать, что отдельный процесс предполагает и иные правила работы с файлами. Так например, простой копипаст формул между файлами уже работать не будет (формула скопируется как значение). Копирование листа в другую книгу также не сработает (в мастере копирования вы просто не увидите другие открытые книги). Если на уровне VBA эти тонкие моменты можно учесть и обойти, то в обычной работе с Excel этого не избежать.

Как один из плюсов работы в отдельном процессе — через диспетчер задач можно смело закрывать зависший процесс excel, другие файлы (запущенные в отдельных процессах) при этом не пострадают.

Вы правы, что вам нужно использовать параметр командной строки /X для Excel. Вероятно, у вас возникли проблемы из-за синтаксиса команды « Пуск».

Прежде всего, вот правильная команда для запуска двух отдельных экземпляров Excel, каждый с заданной вами книгой.

start "title" "C:Program Files (x86)Microsoft OfficeOffice14EXCEL.EXE" /X C:A.xlsx
start "title" "C:Program Files (x86)Microsoft OfficeOffice14EXCEL.EXE" /X C:B.xlsx

Обратите внимание на дополнительный параметр "title" в команде Start. Этот дополнительный параметр необходим для того, чтобы команда «Пуск» не могла интерпретировать ваш полный путь к Excel.exe в качестве заголовка для нового окна командной строки.

Зачем добавлять дополнительный параметр title в Start?

Команда «Пуск» принимает необязательный параметр «Заголовок», который можно использовать для запуска нового окна командной строки с настраиваемым заголовком. Например, команда Start "My New Window" запустит новое окно командной строки с заголовком «Мой новый заголовок».

Поэтому при запуске команды:

Start "C:Program Files (x86)Microsoft OfficeOffice14EXCEL.EXE" /X C:A.xlsx

Команда Start интерпретирует часть в двойных кавычках как параметр заголовка. В результате единственная часть вашей команды, которую фактически выполняет Start, это:

/X C:A.xlsx

Который не является действительной командой.

При работе приложения записывается отчёт в Excel. Если при этом параллельно открыт другой документ в Excel, то следующий код закроет и Excel-документ, открытый с помощью COM, и тот файл, который к приложению отношения не имеет:

Dim w As Workbook
    For Each w In mExcel.Workbooks
        w.Save()
    Next
 mExcel.Quit()

Насколько я понял, погуглив, это особенность Excel 2013 — открывать документы в одном процессе. Подскажите, как же открыть Excel с помощью COM в отдельном процессе? Спасибо!

задан 8 июн 2015 в 11:33

MaksimNikicin's user avatar

2

Попробуйте пример из документации

Set xl = CreateObject("Excel.Sheet") 
xl.Application.Workbooks.Open "newbook.xls"

Добавлено:

Похоже в 2013 так не получится, если верить «новшествам версии 2013». Скорее всего придется следить за количеством открытых книг перед закрытием/выходом_из_приложения

Еще вот что найдено в документации. Открыть Excel отдельным процессом можно, но несколько в противоестественной для Windows манере — через командную строку excel.exe /x

ответ дан 8 июн 2015 в 12:06

tutankhamun's user avatar

tutankhamuntutankhamun

11.3k5 золотых знаков25 серебряных знаков40 бронзовых знаков

5

Like this post? Please share to your friends:
  • Запрет переноса строк в таблице word
  • Запрет висячих строк в excel
  • Запуск excel 1 microsoft excel 2 пуск 3 программы
  • Запрет обновления полей в word
  • Запрет висячие строки в word что это