No estoy seguro de haber entendido pero te pongo una idea.
Tengo una situación similar en la que debo elaborar listas de alumnos de uno o más grupos. Cada grupo debe ir en una hoja distinta pero todas los hojas son iguales en cuanto al formato.
En lugar de crear una hoja oculta lo que hago es crear la primera hoja a partir de una plantilla (como le haces tú, segun me parece) y lleno los datos.
Cuando tengo que agregar una nueva hoja utilizo algo así:
Código:
Hoja := Libro.ActiveSheet as _WORKSHEET;
Hoja.Copy(null, Hoja, 0);
Hoja := Libro.ActiveSheet as _WORKSHEET;
Hoja.Name := 'Hoja' + IntToStr(Libro.Sheets.Count);
LimpiarHoja(Hoja);
Es decir, copio la hoja activa, asigno a la copia un nombre secuencial y finalmente
limpio la hoja, es decir, borro sus datos. De esta manera el formato queda igual que la plantilla original pero con celdas vacías.
En el método LimpiarHoja simplemente borro las celdas que me interesen:
Hoja.Cells.Item[Ren, Col] := '';
preservando las que sean comunes como títulos y demás.
En cuanto a lo de que se cuelga quizá te sirva poner
Excel.AutoQuit en true.
// Saludos