【发布时间】: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 代码的情况下传输。我还发布了另一个解决方案,我在复制工作表后保存工作簿。我以前的保存方式是创建无法打开的工作簿。我的新储蓄方式给了我想要的东西。