Здравствуйте. Помогите пожалуйста решить такую дилемму: Всё началось, когда Excel-ю вздумалось иногда запускаться несколькими процессами. Есть два файла "ПЕРВЫЙ.xlsm" и "ВТОРОЙ.csv". В "ПЕРВОМ" хранится список телефонов и макрос для удаления этих же телефонов из "ВТОРОГО". "ВТОРОЙ" каждый день создаётся заново. Если оба файла открыты под ОДНИМ ПРОЦЕССОМ Excel, то можно запустить макрос прямо из "ВТОРОГО" файла - И ВСЁ РАБОТАЕТ! Если они открыты в ДВУХ ПРОЦЕССАХ Excel, то во "ВТОРОМ" макрос из "ПЕРВОГО"не отображается. - Это загадка вообще из ряда вон! Никак не пойму, почему то один процесс, то два процесса. В реестре везде указано "открывать одним процессом". При сохранении макроса в Личной книге две проблемы: 1) иногда пишет, что файл "Personal.xlsb" закрыть для редактирования (хотя оно разрешено). 2) не получается указать ПРАВИЛЬНЫЙ путь к "ПЕРВОМУ" файлу.
Установлен Office 2010. В 2013-м всё запускается одним процессом, но файлы обрабатываются в разы медленнее! Если нужно прикрепить файлы - скажите. Буду благодарен любой помощи.
Здравствуйте. Помогите пожалуйста решить такую дилемму: Всё началось, когда Excel-ю вздумалось иногда запускаться несколькими процессами. Есть два файла "ПЕРВЫЙ.xlsm" и "ВТОРОЙ.csv". В "ПЕРВОМ" хранится список телефонов и макрос для удаления этих же телефонов из "ВТОРОГО". "ВТОРОЙ" каждый день создаётся заново. Если оба файла открыты под ОДНИМ ПРОЦЕССОМ Excel, то можно запустить макрос прямо из "ВТОРОГО" файла - И ВСЁ РАБОТАЕТ! Если они открыты в ДВУХ ПРОЦЕССАХ Excel, то во "ВТОРОМ" макрос из "ПЕРВОГО"не отображается. - Это загадка вообще из ряда вон! Никак не пойму, почему то один процесс, то два процесса. В реестре везде указано "открывать одним процессом". При сохранении макроса в Личной книге две проблемы: 1) иногда пишет, что файл "Personal.xlsb" закрыть для редактирования (хотя оно разрешено). 2) не получается указать ПРАВИЛЬНЫЙ путь к "ПЕРВОМУ" файлу.
Установлен Office 2010. В 2013-м всё запускается одним процессом, но файлы обрабатываются в разы медленнее! Если нужно прикрепить файлы - скажите. Буду благодарен любой помощи.emkub
Проверьте, возможно он запускается не просто разными процессами, но еще и под разными пользователями (каждый процесс под своим). Или один процесс открыт из explorer, а другой через svchost (например, из под другой программы)...
Если они открыты в ДВУХ ПРОЦЕССАХ Excel, то во "ВТОРОМ" макрос из "ПЕРВОГО"не отображается. - Это загадка вообще из ряда вон!
Это нормально, т.к. у них разные Application
[p.s.]Какая у вас операционка?[/p.s.]
Проверьте, возможно он запускается не просто разными процессами, но еще и под разными пользователями (каждый процесс под своим). Или один процесс открыт из explorer, а другой через svchost (например, из под другой программы)...
ОС - Win_7_32 bit Проверил, оба запускаются одним пользователем (имя учётной записи). Оба файла запускаются программой nnCron. Возможно ли из "ПЕРВОГО" запустить "ВТОРОЙ", чтобы макрос выполнялся во "ВТОРОМ"? Будут ли они в этом случае запущены ОДНИМ процессом?
ОС - Win_7_32 bit Проверил, оба запускаются одним пользователем (имя учётной записи). Оба файла запускаются программой nnCron. Возможно ли из "ПЕРВОГО" запустить "ВТОРОЙ", чтобы макрос выполнялся во "ВТОРОМ"? Будут ли они в этом случае запущены ОДНИМ процессом?emkub
Сообщение отредактировал emkub - Среда, 08.07.2015, 18:19
У вас происходит именно то, о чем я писал в пред посте. nnCron у вас выполняется как служба, и процессы он создает через службу DcomLaunch (Модуль запуска процессов DCOM-сервера) (процесс svchost), соответственно, оба процесса будут созданы как 2 разных Excel.Application, поэтому книги открытые в них не видят друг-друга.
Возможно ли из "ПЕРВОГО" запустить "ВТОРОЙ", чтобы макрос выполнялся во "ВТОРОМ"?
Да, и так можно (хотя описанное выше, это не и первого второй, а оба из другого процесса, из крона) Попробуйте запустить вложенный файл... Он запустится из explorer, и создаст 2 разных процесса (через svchost), и книги, открытые в этих 3-х Excel.Application, друг-друга видеть не будут. И если закрыть первый Excel (который был открыт из explorer), а затем еще раз открыть Excel (например, через ярлык), то снова создастся новый (3-й) Excel.Application, в иерархии процесса explorer, несмотря на то, что 2 процесса Excel.Application уже открыты через DcomLaunch.
У вас происходит именно то, о чем я писал в пред посте. nnCron у вас выполняется как служба, и процессы он создает через службу DcomLaunch (Модуль запуска процессов DCOM-сервера) (процесс svchost), соответственно, оба процесса будут созданы как 2 разных Excel.Application, поэтому книги открытые в них не видят друг-друга.
Возможно ли из "ПЕРВОГО" запустить "ВТОРОЙ", чтобы макрос выполнялся во "ВТОРОМ"?
Да, и так можно (хотя описанное выше, это не и первого второй, а оба из другого процесса, из крона) Попробуйте запустить вложенный файл... Он запустится из explorer, и создаст 2 разных процесса (через svchost), и книги, открытые в этих 3-х Excel.Application, друг-друга видеть не будут. И если закрыть первый Excel (который был открыт из explorer), а затем еще раз открыть Excel (например, через ярлык), то снова создастся новый (3-й) Excel.Application, в иерархии процесса explorer, несмотря на то, что 2 процесса Excel.Application уже открыты через DcomLaunch.KSV
Да уж... Подскажите тогда пожалуйста, как реализовать такую схему: "Первый" открывается стандартным планировщиком и в 12:00.00 запускает "ВТОРОЙ" файл. И во "ВТОРОМ" запускается "макрос_1", который сохранён в "ПЕРВОМ" Надеюсь при таком раскладе, работать корректно.
Да уж... Подскажите тогда пожалуйста, как реализовать такую схему: "Первый" открывается стандартным планировщиком и в 12:00.00 запускает "ВТОРОЙ" файл. И во "ВТОРОМ" запускается "макрос_1", который сохранён в "ПЕРВОМ" Надеюсь при таком раскладе, работать корректно.emkub
А зачем вам именно такая схема запуска? Я бы, все-таки, сделал по-другому... При открытии "ПЕРВЫЙ.xlsm" сразу запускал бы "макрос_1", в котором открывал "ВТОРОЙ.csv" и обрабатывал бы. Или, если открывать "ПЕРВЫЙ.xlsm" нужно раньше, а обрабатывать "ВТОРОЙ.csv" ровно в 12:00, можно при открытии "ПЕРВЫЙ.xlsm" устанавливать таймер на запуск "макрос_1".[vba]
Код
Private Sub Workbook_Open() Application.OnTime #12:00:00 PM#, "макрос_1" End Sub
[/vba]
А зачем вам именно такая схема запуска? Я бы, все-таки, сделал по-другому... При открытии "ПЕРВЫЙ.xlsm" сразу запускал бы "макрос_1", в котором открывал "ВТОРОЙ.csv" и обрабатывал бы. Или, если открывать "ПЕРВЫЙ.xlsm" нужно раньше, а обрабатывать "ВТОРОЙ.csv" ровно в 12:00, можно при открытии "ПЕРВЫЙ.xlsm" устанавливать таймер на запуск "макрос_1".[vba]
Код
Private Sub Workbook_Open() Application.OnTime #12:00:00 PM#, "макрос_1" End Sub
Только что так и пытался сделать. Но при открытии "ВТОРОГО.CSV" макросом, он открывается некорректно (просто в строку через разделитель ;). А при открытии любым другим способом - нормально. Прямо засада какая-то!
Только что так и пытался сделать. Но при открытии "ВТОРОГО.CSV" макросом, он открывается некорректно (просто в строку через разделитель ;). А при открытии любым другим способом - нормально. Прямо засада какая-то!emkub
Вы уж определитесь тогда, как вы вызываете Workbooks.Open - как процедуру или как функцию. Именованные параметры (Local:=True) можно применять только при "процедурном" вызове (без скобок), и тогда ВСЕ параметры надо вызывать как именованные - FileName:=..., ReadOnly:=True, ... Либо вы вызываете как функцию (чтобы возвратить объект - открытую книгу), и тогда в скобках надо перечислить ВСЕ параметры до необходимого последнего опционального, оставляя пропуски на местах опциональных с дефолтными значениями: ("FileName", False, True, , , , , , , , , , , True)
Вы уж определитесь тогда, как вы вызываете Workbooks.Open - как процедуру или как функцию. Именованные параметры (Local:=True) можно применять только при "процедурном" вызове (без скобок), и тогда ВСЕ параметры надо вызывать как именованные - FileName:=..., ReadOnly:=True, ... Либо вы вызываете как функцию (чтобы возвратить объект - открытую книгу), и тогда в скобках надо перечислить ВСЕ параметры до необходимого последнего опционального, оставляя пропуски на местах опциональных с дефолтными значениями: ("FileName", False, True, , , , , , , , , , , True)AndreTM
[/vba] [moder]Оформляйте коды тегами (кнопка #). И меняйте раскладку на русскую перед копированием, чтобы кодировка не слетала. Последний раз за Вами поправляю![/moder]
[/vba] [moder]Оформляйте коды тегами (кнопка #). И меняйте раскладку на русскую перед копированием, чтобы кодировка не слетала. Последний раз за Вами поправляю![/moder]emkub
Сообщение отредактировал Manyasha - Пятница, 10.07.2015, 12:23
Смотрите. Вот такая вот фигня: Workbook.Open Filename:= "..." - открывает файл *.csv одним процессом, НО, в строку с ";"-разделителем ячеек Shell Application.Paht & "\Excel.exe D:\..." - открывает файл *.csv как положено, НО, ВТОРЫМ процессом.
А нужно сделать так, чтобы он открывался как положено И одним процессом... Прикрепляю оригинальный файл.
Смотрите. Вот такая вот фигня: Workbook.Open Filename:= "..." - открывает файл *.csv одним процессом, НО, в строку с ";"-разделителем ячеек Shell Application.Paht & "\Excel.exe D:\..." - открывает файл *.csv как положено, НО, ВТОРЫМ процессом.
А нужно сделать так, чтобы он открывался как положено И одним процессом... Прикрепляю оригинальный файл.emkub
Sub qq() Dim wb As Workbook Set wb = Workbooks.Open("C:\Users\OFIS\Documents\ЗагрузкиMaxthon\09.07.15" & ".csv", False, True, , , , , , , , , , , Local:=True) End Sub
[/vba] и так тоже [vba]
Код
Sub qq() Dim wb As Workbook Set wb = Workbooks.Open("C:\Users\OFIS\Documents\ЗагрузкиMaxthon\09.07.15" & ".csv", False, True, , , , , , , , , , , True) End Sub
[/vba]
Да нормально открывается [vba]
Код
Sub qq() Dim wb As Workbook Set wb = Workbooks.Open("C:\Users\OFIS\Documents\ЗагрузкиMaxthon\09.07.15" & ".csv", False, True, , , , , , , , , , , Local:=True) End Sub
[/vba] и так тоже [vba]
Код
Sub qq() Dim wb As Workbook Set wb = Workbooks.Open("C:\Users\OFIS\Documents\ЗагрузкиMaxthon\09.07.15" & ".csv", False, True, , , , , , , , , , , True) End Sub