Что я хочу сделать, это создать обычную книгу Excel (.xlsx), в которой я суммирую входные / выходные данные некоторых симуляций, копируя некоторые листы из книги с поддержкой макросов (.xlsm) и вставляя в обычную книгу Excel , Исходные листы содержат макросы, фигуры, именованные диапазоны, раскрывающиеся списки и некоторое форматирование. Я хочу, чтобы некоторые свойства листов переходили в новую рабочую книгу (именованные диапазоны, форматирование строк и столбцов, форматирование ячеек), но не другие (формы, раскрывающиеся списки, макросы). Я также должен распространить рабочую книгу .xlsm другим пользователям, поэтому мне нужно решение, которое не требует от пользователя предоставления разрешений.
Если я копирую / вставляю, как показано ниже, тогда я получаю все свойства рабочий лист, чтобы перейти к новой рабочей книге. Я выяснил, как удалять фигуры и удалять форматирование выпадающего списка из листа в новой книге, но я не могу удалить код VBA листа без изменения ссылок VBA.
Если я вставлю специальное сообщение, то я можно избежать переноса кода VBA на листе, но я не могу перенести именованные диапазоны.
CopySheetToWB(sht as string, wb_New as workbook)
Dim sht_Name as string, rng As Range, shp as shape
Dim ws As Worksheet, wb As Workbook, ws_New As Worksheet
' set sheet in CURRENT wb
Set wb = ThisWorkbook
Set ws = wb.Worksheets(sht)
' copy/paste sheet to NEW wb
ws.Copy after:=wb_New.Sheets(wb_New.Sheets.Count)
' delete shapes from NEW ws
Set ws_New = wb_New.Worksheets(sht)
For Each shp In ws_New.Shapes
shp.Delete
Next shp
' remove dropdown lists from copied sheet
ws_New.Cells.Validation.Delete
End Sub