【发布时间】:2017-05-30 01:55:55
【问题描述】:
我有工作簿,其工作表的数据包含颜色、下拉(通过下拉选择,单元格会更改其颜色)等格式。我一直在尝试创建特定工作表的副本并使用简单的右键单击将其发送并创建副本到创建副本但不携带基于文本值的单元格颜色的新工作簿。到目前为止,我已经尝试使用不同的 VB 代码来实现相同的结果——创建新的工作簿并粘贴数据但没有格式化。我试过使用下面的代码:
Sub CopySheetToNewWorkbook1()
Dim wname As String
wname = ActiveCell.Value
Sheets(wname).Cells.Copy
Set nbook = Workbooks.Add(1)
With nbook.Sheets(1)
.Cells.PasteSpecial xlValues
.Cells.PasteSpecial xlFormats
End With
Range("a:l").EntireColumn.AutoFit
End Sub
又一次尝试:
Sub CopySheetToNewWorkbook2()
Dim wname As String
wname = ActiveCell.Value
Sheets(wname).Activate
Range("a1:l25").Copy
Set nbook = Workbooks.Add(1)
Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone, SkipBlanks:=False
Range("a:l").EntireColumn.AutoFit
End Sub
我认为这个可以保存工作簿并保留所有格式,但它再次变成没有帮助。 (也可以创建副本但没有保存,出现错误消息“方法另存为对象工作簿失败”):
Sub CopySheetToNewWorkbook3()
Dim wname As String
wname = ActiveCell.Value
Sheets(wname).Copy
ActiveWorkbook.SaveAs "C:\Data:\Roster.xlsx", FileFormat:=51
End Sub
在我放弃并决定寻求帮助之前的最后一次尝试(在这一次我不太清楚如何在新工作簿中引用过去 - 绝对失败:
Sub CopySheetToNewWorkbook4()
Dim wname As String
wname = ActiveCell.Value
Set nbook = Workbooks.Add
Sheets(wname).Copy before:=Workbook.nbook.seehts(1)
With nbook.Sheets(1).UsedRange
.Value = .Value
End With
End Sub
我希望我能找到正确的方向,因为我已经尝试了所有可能的帮助,但直到现在都没有成功。
【问题讨论】:
-
我想补充一点,通过上述所有尝试,它确实复制了某些单元格的单元格颜色,但不是全部。
-
(a) 我假设在所有这些尝试中,调用宏时活动单元格的值是要复制的工作表的名称? (b) 在
CopySheetToNewWorkbook4中,Workbook.nbook.seehts(1)应该是nbook.Sheets(1)才有意义,但Sheets(wname)不会存在于新工作簿中,因此副本将不起作用。 (c) 在CopySheetToNewWorkbook3中,您的文件名无效 - 路径不能包含:- 这是为驱动器和路径之间的分隔符保留的。 -
@YowE3K 是的,我有工作表名称列表,并且所有工作表都存在于工作表中,由工作表名称列表(即 activecell.value)引用。
-
@YowE3K 感谢所有输入,我纠正了所有输入,但我在同一点上.. 你想发出任何朝着正确方向移动的信号,我可以尝试确保细胞形成被复制到新的工作簿中?