Si el programa lo iniciaste tú, fijate en este ejemplo que ejecuta un programa y si en 1 minuto no acaba por si solo, lo finaliza:
Private Declare Function OpenProcess Lib "Kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessID As Long) As Long
Private Declare Function GetExitCodeProcess Lib "Kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Sub Sleep Lib "Kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Sub Someter()
Const STILL_ACTIVE = &H103
Const PROCESS_QUERY_INFORMATION = &H400
Dim lng1 As Long, lngRc As Long
Dim intCta as Integer, lngExitCode as long
lng1 = OpenProcess(PROCESS_QUERY_INFORMATION, False, Shell("MiPrograma.Exe", vbNormalFocus))
Do
GetExitCodeProcess lng1, lngRc
intCta = intCta + 1
if intCta > 60 Then
lngRc = TerminateProcess(lng1 , lngExitCode)
Exit Do
Else
Sleep 1000
DoEvents
End If
Loop While lngRc = STILL_ACTIVE
End Sub
Suerte.