- 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 на панели задач — откроется контекстное меню со списком последних файлов.
- В нижней части этого меню будет строка Excel — щёлкните по ней левой кнопкой мыши, удерживая при этом клавишу Alt.
Должен запуститься ещё один Excel в новом процессе. Также вместо щелчка левой кнопкой с Alt можно использовать среднюю кнопку мыши — если на вашей мышке она есть (или нажимное колесико выполняет её роль).
Способ 3. Командная строка
Выберите в главном меню Пуск — Выполнить (Start — Run) или нажмите сочетание клавиш Win+R. В появившемся поле введите команду:
После нажатия на ОК должен запуститься новый экземпляр Excel в отдельном процессе.
Способ 4. Макрос
Это вариант чуть сложнее, чем предыдущие, но работает в любой версии Excel по моим наблюдениям:
- Открываем редактор Visual Basic через вкладку Разработчик — Visual Basic (Developer — Visual Basic) или сочетанием клавиш Alt + F11. Если вкладки Разработчик не видно, то отобразить её можно через Файл — Параметры — Настройка ленты (File — Options — Customize Ribbon).
- В окне Visual Basic вставляем новый пустой модуль для кода через меню Insert — Module.
- Копируем туда следующий код:
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. После переименования появится предупреждение, с которым надо согласиться, и у файла изменится иконка:
Всё. Теперь двойной щелчок левой кнопкой мыши по этому файлу будет запускать новый независимый экземпляр 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
2
Попробуйте пример из документации
Set xl = CreateObject("Excel.Sheet")
xl.Application.Workbooks.Open "newbook.xls"
Добавлено:
Похоже в 2013 так не получится, если верить «новшествам версии 2013». Скорее всего придется следить за количеством открытых книг перед закрытием/выходом_из_приложения
Еще вот что найдено в документации. Открыть Excel отдельным процессом можно, но несколько в противоестественной для Windows манере — через командную строку excel.exe /x
ответ дан 8 июн 2015 в 12:06
tutankhamuntutankhamun
11.3k5 золотых знаков25 серебряных знаков40 бронзовых знаков
5