powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Работа с несколькими экземплярами приложения Excell
8 сообщений из 8, страница 1 из 1
Работа с несколькими экземплярами приложения Excell
    #33447089
LKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LKO
Гость
Есть приложение на VB, взаимодействующее с Excell. Оно (приложение) открывает в уже запущеном экземпляре файлы и читает из них информацию. Проблемы возникают, когда запущено несколько экземпляров Excel - приложение хватается за какой-то один (последний активный).
Как сделать возможность выбора к какому экземпляру цепляться?
...
Рейтинг: 0 / 0
Работа с несколькими экземплярами приложения Excell
    #33447230
А избежать создание второго экземпляра приложения нельзя?
...
Рейтинг: 0 / 0
Работа с несколькими экземплярами приложения Excell
    #33447261
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если так?

Код: plaintext
1.
2.
3.
4.
5.
    ' sheet with query conditions
    Set ws = app.Worksheets.Add
    ws.Visible = False
    ws.Name = "my_Sheet"

...
Рейтинг: 0 / 0
Работа с несколькими экземплярами приложения Excell
    #33447476
LKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LKO
Гость
MelkiadesА если так?

Код: plaintext
1.
2.
3.
4.
5.
    ' sheet with query conditions
    Set ws = app.Worksheets.Add
    ws.Visible = False
    ws.Name = "my_Sheet"



Если "app" - это ссылка на экземпляр Excell.Application, то вопрос в том, что бы получить ссылку на нужный укземпляр
...
Рейтинг: 0 / 0
Работа с несколькими экземплярами приложения Excell
    #33447493
LKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LKO
Гость
Пользователь2А избежать создание второго экземпляра приложения нельзя?

К сожалению не всегда удается :-(
Мое приложение при запуске в случае, если Excell уже загружен, проверяет открыты ли в Excell определенные файлы. В случае, если экземпляров несколько (так бывает довольно часто) проверяется какой-то один из экземпляров. При этом второй игнорируется, и как проверять еще и его...
...
Рейтинг: 0 / 0
Работа с несколькими экземплярами приложения Excell
    #33447507
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот так не пойдет?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
Option Explicit

Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function Module32First Lib "kernel32" (ByVal hSnapshot As Long, uProcess As MODULEENTRY32) As Long
Private Declare Function Module32Next Lib "kernel32" (ByVal hSnapshot As Long, uProcess As MODULEENTRY32) As Long
Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Boolean
Private Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long
Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long

Private Type MODULEENTRY32
  dwSize As Long
  th32ModuleID As Long
  th32ProcessID As Long
  GlblcntUsage As Long
  ProccntUsage As Long
  modBaseAddr As Long
  modBaseSize As Long
  hModule As Long
  szModule As String *  256 
  szExePath As String *  260 
End Type

Private Const PROCESS_ALL_ACCESS = &H1F0FFF

Sub Main()
    EnumWindows AddressOf EnumWindowsProc, ByVal  0 &
End Sub

Public Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As Boolean
    Dim uProcess As MODULEENTRY32, hSnapshot As Long, n  As Long
    Dim lngHwndProcess As Long, strProcessName  As String

    GetWindowThreadProcessId hwnd, lngHwndProcess 
    
    hSnapshot = CreateToolhelp32Snapshot( 8 , lngHwndProcess)
    uProcess.dwSize = Len(uProcess)
    n = Module32First(hSnapshot, uProcess)

    Do While n
        strProcessName = UCase$(Left(uProcess.szModule, InStr(uProcess.szModule, Chr( 0 )) -  1 ))
        
        If strProcessName Like "*.EXE*" Then
            
           Debug.Print strProcessName
        
        End If
        n = Module32Next(hSnapshot, uProcess)
    Loop
    
    EnumWindowsProc = True
End Function

...
Рейтинг: 0 / 0
Работа с несколькими экземплярами приложения Excell
    #33447508
LeonM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
See: createobject, getobject
...
Рейтинг: 0 / 0
Работа с несколькими экземплярами приложения Excell
    #33447531
LKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LKO
Гость
Melkiades
Спасибо, буду разбираться :)

LeonM

GetObject возвращает ссылку на экземпляр по имени основного объекта. Именно этот метод я сейчас и использую, но это не решает моей проблемы :(
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Работа с несколькими экземплярами приложения Excell
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]