Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
28.03.2024, 12:54:25

Войти
Интересные и полезные статьи по работе с Excel и VBA можно найти в разделе ХИТРОСТИ
33 233 Сообщений в 5 454 Тем от 6 750 Пользователей
Последний пользователь: Alex1210
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Вопросы по Excel и VBA
| | |-+  как не запускать несколько процессов excel?
Страниц: [1]   Вниз
Печать
Автор Тема: как не запускать несколько процессов excel?  (Прочитано 11050 раз)
0 Пользователей и 1 Гость смотрят эту тему.
artemas
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 9


Просмотр профиля E-mail
« : 22.04.2014, 10:52:09 »

Добрый день
Подскажите пожалуйста:
Программа Microsoft Dynamics при экспорте данных в excel с каждой операцией, создаваемую новую книгу открывает в новом процессе.
Как сделать так, чтобы файлы открывались в одном процессе excel и других не запускалось? Видимо нужно что изменить в реестре?
win7-64, excel 2007
Спасибо.
Записан
RAN
Эксперты
Старожил
*

Репутация: +43/-0
Офлайн Офлайн

Сообщений: 440



Просмотр профиля E-mail
« Ответ #1 : 22.04.2014, 22:14:16 »

Зачем в реестре?
Изменить в Microsoft Dynamics будет необходимо и достаточно.
Записан

А что ты умеешь?
Учиться...
Юрий М
Глобальный модератор
Ветеран
*****

Репутация: +112/-0
Офлайн Офлайн

Сообщений: 2 077



Просмотр профиля E-mail
« Ответ #2 : 22.04.2014, 22:49:12 »

Котяра, это где? )
Записан
RAN
Эксперты
Старожил
*

Репутация: +43/-0
Офлайн Офлайн

Сообщений: 440



Просмотр профиля E-mail
« Ответ #3 : 22.04.2014, 23:08:08 »

Что значит "Где"?
Лезешь в программу "Microsoft Dynamics" и там где нужно, там и правишь.
Рыбка не помогает?  ;D

Можешь в файнридер залезть...
« Последнее редактирование: 22.04.2014, 23:11:10 от RAN » Записан

А что ты умеешь?
Учиться...
RAN
Эксперты
Старожил
*

Репутация: +43/-0
Офлайн Офлайн

Сообщений: 440



Просмотр профиля E-mail
« Ответ #4 : 22.04.2014, 23:15:08 »

Не попал в предыдушее сообщение, но файнридер то же каждый файл в новый процесс кидает...
Записан

А что ты умеешь?
Учиться...
Юрий М
Глобальный модератор
Ветеран
*****

Репутация: +112/-0
Офлайн Офлайн

Сообщений: 2 077



Просмотр профиля E-mail
« Ответ #5 : 22.04.2014, 23:22:01 »

Про Microsoft Dynamics вообще впервые слышу ((
Записан
artemas
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 9


Просмотр профиля E-mail
« Ответ #6 : 23.04.2014, 15:07:25 »

В dax этого не настроить. Нужен вариант с настройкой именно на персональной машине.
Может кто то подскажет? Видимо не один dax запускает дубли процессов excel.
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 828



Просмотр профиля WWW
« Ответ #7 : 23.04.2014, 15:14:06 »

artemas, тут дело такое...Если программа написана таким образом, что она для создания новой книги создает новый экземпляр приложения и никак это не настроить из интерфейса программы - 99%, что это вообще не настроить. Из Excel Вы этого точно не сделаете. Полагаю, что имеет смысл задать вопрос на форуме по Microsoft Dynamics.
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
artemas
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 9


Просмотр профиля E-mail
« Ответ #8 : 24.04.2014, 18:24:09 »

Я правильно понимаю, что через реестр никак не сделать? Как то можно ведь запретить запуск копий программы?
В любом случае, спасибо за помощь Улыбка
Записан
artemas
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 9


Просмотр профиля E-mail
« Ответ #9 : 24.04.2014, 18:30:41 »

вот они где запускаются
Записан
doober
Глобальный модератор
Ветеран
*****

Репутация: +67/-0
Офлайн Офлайн

Сообщений: 634


Просмотр профиля E-mail
« Ответ #10 : 25.04.2014, 11:01:44 »

artemas ,ничего вы с этим не сделаете.
Например,пишу я приложение,которое создает файл Excel.
Зачем мне гембель на голову в поисках уже запущеного экземпляра Excel.
Я создам новый и буду работать с ним.
Я  еще не встречал реализации,которую вы хотите получить.
Записан
artemas
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 9


Просмотр профиля E-mail
« Ответ #11 : 25.04.2014, 11:14:03 »

ок!
Тогда такой вопрос
этим макросом я закрываю все ненужные мне книги без сохранения.
Код: (vb)
Sub ЗАКРЫТЬ()

Dim oWb As Workbook
    For Each oWb In Workbooks
        Select Case oWb.Name
        Case "PERSONAL.XLS"
            'Ваши действия с этой книгой
        Case "КПДТ_ALL_11.xls"
            'Ваши действия с этой книгой       
        Case "проверка_1403.xls"
            'Ваши действия с этой книгой       
        Case Else
            'Если имя не входит в перечисленные выше
            oWb.Close False
        End Select
    Next oWb
   
   
End Sub

Однако они запущенны в одном процессе с PERSONAL.XLS
Все остальные процессы по этому макросу записанному в PERSONAL.XLS не закрываются естественно.
Помогите пожалуйста дописать код, чтобы и другие процессы закрывались без сохранения, а оставались только книги из первого процесса.
спасибо
Записан
doober
Глобальный модератор
Ветеран
*****

Репутация: +67/-0
Офлайн Офлайн

Сообщений: 634


Просмотр профиля E-mail
« Ответ #12 : 25.04.2014, 23:39:36 »

Код взял здесь,модеренизировал под вашу задачу

spoiler for Hiden:
Код: (vb)
Option Explicit
Private Declare Function FindWindowEx Lib "User32" Alias "FindWindowExA" _
        (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, _
         ByVal lpsz2 As String) As Long
Private Declare Function IIDFromString Lib "ole32" _
        (ByVal lpsz As Long, ByRef lpiid As GUID) As Long
Private Declare Function AccessibleObjectFromWindow Lib "oleacc" _
        (ByVal hWnd As Long, ByVal dwId As Long, ByRef riid As GUID, _
         ByRef ppvObject As Object) As Long
        
Private Type GUID
    Data1 As Long
    Data2 As Integer
    Data3 As Integer
    Data4(7) As Byte
End Type
Private Const S_OK As Long = &H0
Private Const IID_IDispatch As String = "{00020400-0000-0000-C000-000000000046}"
Private Const OBJID_NATIVEOM As Long = &HFFFFFFF0

Sub Терминатор()
Dim i As Long
Dim hWinXL As Long
Dim xlApp As Excel.Application
Dim oWb As Excel.Workbook
    hWinXL = FindWindowEx(0&, 0&, "XLMAIN", vbNullString)
    While hWinXL > 0
        i = i + 1
        If GetXLapp(hWinXL, xlApp) Then
           For Each oWb In xlApp.Workbooks
                
        Select Case oWb.Name
        Case "PERSONAL"
            'Ваши действия с этой книгой
        Case "КПДТ_ALL_11"
            'Ваши действия с этой книгой
        Case "проверка_1403"
            'Ваши действия с этой книгой
        Case Else
            'Если имя не входит в перечисленные выше
            oWb.Close False
        End Select
                
                
            Next
        End If
        hWinXL = FindWindowEx(0, hWinXL, "XLMAIN", vbNullString)
    Wend
    
End Sub


Function GetXLapp(hWinXL As Long, xlApp As Excel.Application) As Boolean
Dim hWinDesk As Long, hWin7 As Long
Dim obj As Object
Dim iid As GUID
    
    Call IIDFromString(StrPtr(IID_IDispatch), iid)
    hWinDesk = FindWindowEx(hWinXL, 0&, "XLDESK", vbNullString)
    hWin7 = FindWindowEx(hWinDesk, 0&, "EXCEL7", vbNullString)
    If AccessibleObjectFromWindow(hWin7, OBJID_NATIVEOM, iid, obj) = S_OK Then
        Set xlApp = obj.Application
        GetXLapp = True
    End If
End Function
Записан
artemas
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 9


Просмотр профиля E-mail
« Ответ #13 : 29.04.2014, 13:40:57 »

Спасибо
а этот код нужно скопировать в модуль PERSONAL.XLS?
и потом вызывать макрос Терминатор? Или как то ещё?
Не работает что то. Расширения книг (.xls) не нужно указывать?
а то PERSONAL.XLS закрылся, остальное как было - осталось.
« Последнее редактирование: 29.04.2014, 13:47:28 от artemas » Записан
Страниц: [1]   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru