【问题标题】:Copy/Paste worksheet to new workbook without that worksheet's VBA code将工作表复制/粘贴到没有该工作表的 VBA 代码的新工作簿
【发布时间】:2020-06-20 20:43:00
【问题描述】:

我想要做的是创建一个普通的 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

【问题讨论】:

  • 您能否将 ..xlsm 文件另存为 tmp.xlsx(删除宏),然后在删除之前从中复制您的工作表。
  • 我认为这可行。如果您在创建工作簿后立即保存它,然后将工作表复制到新工作簿,则工作表应该在没有 VBA 代码的情况下传输。我还发布了另一个解决方案,我在复制工作表后保存工作簿。我以前的保存方式是创建无法打开的工作簿。我的新储蓄方式给了我想要的东西。

标签: excel vba


【解决方案1】:

我的问题的答案很简单。我的旧代码不起作用,而我的新代码正在起作用。如果您正确保存文件类型,则工作表中的宏不会有问题,因为它们已被删除。

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

还要确保在 str_fName 中包含文件扩展名。 VBA 不会根据您选择的 FileFormat 自动附加正确的文件扩展名。

【讨论】:

    猜你喜欢
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多