Этот метод будет работать как в Excel 2003, так и в Excel 2007. В форму добавьте следующий метод:
Sub CopySheet(WorkSheetName as String)
Dim WrkSht As Worksheet
Set WrkSht = Sheets(WorkSheetName)
WrkSht.Copy After:=Sheets(WorkSheetName)
Set WrkSht = Nothing
End Sub
Из события нажатия кнопки вызовите его, используя:
Sub Button1_Click()
Call CopySheet("WorkSheetToCopyName")
'You could also replace the string name with ActiveSheet if you so wish
End Sub
При этом копия рабочего листа будет помещена между текущим и следующим листом. Я протестировал его в Excel 2003 и Excel 2007, и он работает в обоих. К сожалению, второе имя не выглядит симпатично - оно просто получает то же имя, что и исходный лист, после которого ставится (2).
Все форматирование, защита и формулы тоже скопированы - это копия первого.