2015-08-14 3 views
3

Я могу скопировать рабочий лист, вызвав его метод .Copy.Скопируйте рабочий лист без копирования кода

Sheets("Example").Copy After:=Worksheets("Sheet3") 

Однако это также копирует любые макросы или обработчики событий, связанные с этим листом. Как скопировать лист без копирования кода Visual Basic?

ответ

2

После копирования листа, вы можете ссылаться на него по имени, а затем удалить все строки из модуля кода:

Sheets("Example").Copy After:=Sheets("Sheet3") 

' Get the code/object name of the new sheet... 
Dim strObjectName As String 
strObjectName = ActiveSheet.CodeName 

' Remove all lines from its code module... 
With ThisWorkbook.VBProject.VBComponents(strObjectName).CodeModule 
    .DeleteLines 1, .CountOfLines 
End With 

Edit:

Как указывалось @MackM в комментариях, чтобы работать с компонентами проекта, вам нужно убедиться, что параметр «"Trust access to the VBA project object model"» включен в настройках макроса Excel.

+0

Обратите внимание, что вам нужно предоставить разрешение VBA для изменения другого кода VBA, чтобы использовать этот метод. http://stackoverflow.com/questions/25638344/programmatic-access-to-visual-basic-project-is-not-trusted-excel – MackM

1

Создайте пустой лист и скопируйте содержимое оригинального листа.

Sub Copy_Sheet_Without_Code(original_sheet As String, copied_sheet As String) 
    ' Creates a copy of original_sheet without any VBA code associated with it 
    ' The copy is named copied_sheet 
    Sheets(original_sheet).Cells.Copy 
    Sheets.Add.Name = copied_sheet 
    Sheets(copied_sheet).Cells.PasteSpecial Paste:=xlPasteAll 
End Sub 
+1

Вы задали вопрос, а затем сразу же ответили на него? O.o – findwindow

+1

@findwindow Когда я не могу найти ответ на вопрос, который у меня есть на Stack Overflow, я обычно пытаюсь положить его сюда для всех, кто на моей стороне, после того, как я это выясню. См. Здесь: http://stackoverflow.com/help/self-answer – MackM

+1

Право. Я делал это сам раньше. Я просто не делаю этого сразу после. Я не планирую это XD. Это естественный процесс. На самом деле, я боюсь, что я должен буду ответить на свой последний вопрос. XD – findwindow

Смежные вопросы