Как получить идентификатор процесса текущего экземпляра Excel через VBA, не используя заголовок? - PullRequest
8 голосов
/ 03 июня 2009

Как я могу получить идентификатор процесса текущего экземпляра Excel, в котором выполняется мой код VBA? Я не хочу запрашивать его по имени в заголовке, что вызывает проблемы, когда у меня есть два или более экземпляров Excel с одинаковыми заголовками.

Ответы [ 3 ]

16 голосов
/ 03 июня 2009

Вы можете использовать этот метод для получения текущего идентификатора процесса.

Declare Function GetCurrentProcessId Lib "kernel32" () As Long

Эта страница содержит хороший обзор того, как именно это можно сделать в различных версиях Excel.

3 голосов
/ 12 сентября 2012

Как vba n00b, некоторые другие вещи, которые я не знал

  1. Оператор Declare идет вверху. VBA будет жаловаться, если объявление будет вставлено после вложенной декларации

    Например, это будет работать

    Declare Function GetCurrentProcessId Lib "kernel32" () As Long
    
    Sub Update
      ...
      ...
    End Sub
    

    Но это не сработает

    Sub Update
      ...
      ...
    End Sub
    
    Declare Function GetCurrentProcessId Lib "kernel32" () As Long
    
  2. Вот как мы отображаем PID в окне сообщения в vbscript

    Set app = CreateObject("Excel.Application")
    MsgBox("Excel PID is " + CStr(app.Run("GetCurrentProcessId")))
    

Надеюсь, это кому-нибудь поможет

2 голосов
/ 04 июня 2015

Мое решение в Excel 2013: в новый модуль я добавил следующий код:

Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long

Public Sub Test()
    Debug.Print GetCurrentProcessId
End Sub
...