G'day Shiro
One way would be to copy the entire sheet to a new WB as pasteSpecial.Value,
this ensures none of your code is present in the new WB, this is handy if
the end user only needs to see the data, and doesn't require access for
modification purposes.
As far as automation, Harlan is correct, regarding the triggering without
putting a code in the WS OnChange() event.
I would be more inclined to put the code behind a macro button on your WS to
trigger the process.
Go to this link and modify the code to suit your needs
http://www.rondebruin.nl/copy2.htm
Ron's website has other example code that will certainly help you.
HTH
Mark.