How to get the process ID of the current Excel instance, through VBA, without using the caption?

StackOverflow https://stackoverflow.com/questions/942058

  •  09-09-2019
  •  | 
  •  

Question

How can I get the process ID of the current Excel instance that my VBA code is running in? I don't want to asking for it by the name in the caption, which causes problems when I have two or more Excel instances with the same caption.

Was it helpful?

Solution

You can use this method to get the current process id.

Declare Function GetCurrentProcessId Lib "kernel32" () As Long

This page has a good overview of exactly how you can do it in various versions of excel.

OTHER TIPS

As a vba n00b, some other things I did not know

  1. The Declare statement goes at the top. VBA will complain if the declare statement is inserted after a sub declaration

    For example, this will work

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

    But this will not work

    Sub Update
      ...
      ...
    End Sub
    
    Declare Function GetCurrentProcessId Lib "kernel32" () As Long
    
  2. Here is how we display the PID in a messagebox in vbscript

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

Hope this helps someone

My solution in Excel 2013: in a new module, I added the following code:

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

Public Sub Test()
    Debug.Print GetCurrentProcessId
End Sub
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top