Problem with Excel WIN32OLE and Thread

I am trying to kill excel automation process if it has been running for
more than 15 minutes. The script below is using two threads: thread 1 is
timer that will sleep for 15 minutes; and thread 2 will run the excel
automation.The script works fine except when there’s an excel error
popup dialog box. When this happens, thread 1 fails to kill the excel
automation process (or it never reach that part of the script).

BTW, is there other way to accomplish this without using Thread.

require ‘win32ole’
require ‘win32/api’
include Win32

GetWindowThreadProcessId = API.new(‘GetWindowThreadProcessId’, ‘LP’,‘L’,
‘user32’)

threads = []
threads << Thread.new {
sleep(15*60) # Sleep for 15 minutes
Thread.kill threads[1] # Kill excel thread

Kill Excel process

excel = Thread.current[‘excel’]

excel_pid = [0].pack(‘L’)
GetWindowThreadProcessId.call(excel.Hwnd, excel_pid)
Process.kill(‘KILL’, excel_pid.unpack(‘L’)[0])
}
threads << Thread.new {

Start excel automation

excel = WIN32OLE.new(“excel.application”)
threads[0][‘excel’] = excel

excel[‘Visible’] = FALSE
workbook = excel.Workbooks.Open(‘C:\scripts\Book1.xls’)
excel.Run(‘sample1’) # Run Excel macro, may fail and display error
message box
excel.Quit()

Kill timer thread

Thread.kill threads[0]
}

threads[0].join
threads[1].join