I think I've found a way around this.

I've made Sheet's "workbook" an accessor rather than read-only. When I 
dup a workbook, I dup each sheet, and then overwrite the "workbook" 
attribute with the new one.

When I "dup" a Sheet, it has the same parent as the original, so I could 
overwrite the original if required (like +=).

-- 
Posted via http://www.ruby-forum.com/.