¿Cómo obtener el identificador de proceso de la instancia actual de Excel, a través de VBA, sin necesidad de utilizar el título?
Pregunta
¿Cómo puedo obtener el identificador de proceso de la instancia actual de Excel que mi código VBA se ejecuta en? Yo no quiero pedir él por el nombre en el título, lo que provoca problemas cuando tenga dos o más instancias de Excel con el mismo título.
Solución
Puede utilizar este método para obtener la corriente Identificación del proceso.
Declare Function GetCurrentProcessId Lib "kernel32" () As Long
Esta página tiene una buena visión general de exactamente cómo puede hacerlo en varias versiones de Excel.
Otros consejos
Como un n00b VBA, algunas otras cosas que no conocía
-
La instrucción Declare va en la parte superior. VBA se quejará si se introduce la instrucción declare después de una declaración sub
Por ejemplo, esto va a funcionar
Declare Function GetCurrentProcessId Lib "kernel32" () As Long Sub Update ... ... End Sub
Pero esto no funcionará
Sub Update ... ... End Sub Declare Function GetCurrentProcessId Lib "kernel32" () As Long
-
Aquí es cómo mostramos el PID en un cuadro de mensaje en VBScript
Set app = CreateObject("Excel.Application") MsgBox("Excel PID is " + CStr(app.Run("GetCurrentProcessId")))
Espero que esto ayude a alguien
Mi solución en Excel 2013: en un módulo nuevo, he añadido el siguiente código:
Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long
Public Sub Test()
Debug.Print GetCurrentProcessId
End Sub