Копирование / вставка листа в новую книгу без кода VBA этого листа - PullRequest
1 голос
/ 09 марта 2020

Что я хочу сделать, это создать обычную книгу 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

1 Ответ

0 голосов
/ 09 марта 2020

Ответ на мою проблему оказался довольно простым. Мой старый код, который не работал, и мой новый код, который работает. Если вы сохраните тип файла правильно, то макросы на листах не будут проблемой, так как они будут удалены.

wb_New.SaveAs FileName:=str_fName, FileFormat:=xlWorkbookNormal   'old code
wb_New.SaveAs FileName:=str_fName, FileFormat:=51                 'new code

Также убедитесь, что расширение файла включено в str_fName. VBA не добавляет автоматически правильное расширение файла в соответствии с выбранным вами форматом файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...