Используйте метод WIN32OLE_EVENT.new для создания объекта события OLE, а затем вызовите его метод on_event . Вызовите метод WIN32OLE_EVENT.message_loop , чтобы запустить цикл мониторинга событий.
Вот пример, который распечатывает значение выбранного диапазона, а затем останавливает мониторинг событий перед сохранением книги:
require 'win32ole'
def exit_event_loop
$LOOP = false
end
xl = WIN32OLE.connect('Excel.Application')
wb = xl.ActiveWorkbook
ev = WIN32OLE_EVENT.new(wb, 'WorkbookEvents')
ev.on_event('SheetSelectionChange') do
range = xl.Selection
puts(range.Value)
STDOUT.flush
end
ev.on_event('BeforeSave') do
exit_event_loop
end
$LOOP = true
while $LOOP
WIN32OLE_EVENT.message_loop
sleep 0.1
end
Надеюсь, это поможет.