Поскольку вы не можете редактировать CodeName, пока проект защищен, и мы не хотим снимать защиту с помощью кода, просто используйте другой проект, который не защищен.
Эта temp.xlsm
рабочая книга содержит функцию для редактирования CodeName рабочего листа и возвращает ссылку на этот лист. Эту ссылку можно использовать для копирования листа в защищенную книгу.
Функция выполняется Application.Run("temp.xlsm!EditCodeName", CodeName)
и возвращает лист с отредактированным CodeName.
Порядок копирования рабочего листа:
Public Sub CopySheet()
Dim ws As Excel.Worksheet
Dim wsTemp As Excel.Worksheet
Dim CodeName As String
CodeName = "sh" & VBA.Minute(VBA.Now) & VBA.Second(VBA.Now)
Set ws = ThisWorkbook.Worksheets(1)
Set wsTemp = Application.Run("temp.xlsm!EditCodeName", CodeName)
wsTemp.Copy After:=ws
End Sub
Функция для редактирования CodeName в файле temp.xlsm (если вы поместите его в модуль с именем modCodeName
в защищенной рабочей книге, процедура CreateWB()
копирует его в файл temp.xlsm при создании.
Public Function EditCodeName(ByVal CodeName As String) As Excel.Worksheet
Dim sh As Excel.Worksheet
With ThisWorkbook
Set sh = .Worksheets(1)
sh.[_CodeName] = CodeName
Set EditCodeName = sh
End With
End Function
И процедура создания рабочей книги temp.xlsm
Sub CreateWB()
Const CodeFile As String = "CodeFile.txt"
Const TempWB As String = "temp.xlsm"
With Workbooks.Add
.SaveAs TempWB, xlOpenXMLWorkbookMacroEnabled
ThisWorkbook.VBProject.VBComponents("modCodeName").Export CodeFile
.VBProject.VBComponents.Import CodeFile
.Close True
End With
End Sub