将工作表的值复制到新的工作簿

我试图做一些看起来很简单的事情,但是一直在给我造成麻烦。

将活动工作表复制到没有公式的新工作簿中。

我已经试过我的运气与下面的代码:

Sub test() ActiveSheet.Copy With ActiveSheet.UsedRange .Value = .Value End With End Sub 

但这是非常不可靠的,因为它有时不会复制明显具有价值的领域。 我有单元格需要在同一个该死的单元格中同时具有粗体和正常大小的文本。

上述方法不保留这种格式。

我现在正在做的是这样的:

 Sub EksporterExcel() Dim ws As Worksheet Dim wb As Workbook Dim tid As String Set ws = Sheets(ActiveSheet.Name) tid = Format(CStr(Now), "hh.mm.ss") Application.DisplayAlerts = False Application.ScreenUpdating = False ws.Copy Set wb = Workbooks(ActiveWorkbook.Name) ws.UsedRange.Copy wb.Worksheets(1).Range("A1").PasteSpecial Paste:=xlPasteValuesAndNumberFormats Application.CutCopyMode = False ActiveWorkbook.SaveAs _ FileFormat:=51, _ Filename:=Application.ThisWorkbook.Path & "\Udfyldte Indleveringsplaner\Excel\" & Date & "\" & ActiveSheet.Name & " Kl. " & tid & ".xlsx" ActiveWorkbook.Close Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub 

那是有效的。

但速度很慢。 非常非常慢。 我假设这与复制工作表首先和回去复制单元格值,所以我想要一种方法来避免这种情况。

这种方式也不能保持具有多个格式选项的单个单元格的格式。 然而,这是低优先级。

我很想知道是否有更有效的方法来做到这一点。

以下是使用第一个代码片段或jkpieterse答案中的代码时的结果示例。

原来的表 原始表单被复制之前。

复制的工作表 复制的工作表

一些数据被复制后显然丢失

这个版本怎么样(也整理了一些你的代码):

 Sub EksporterExcel() Dim tid As String tid = Format(CStr(Now), "hh.mm.ss") Application.DisplayAlerts = False Application.ScreenUpdating = False ActiveSheet.Copy ActiveSheet.UsedRange.Value2 = ActiveSheet.UsedRange.Value2 ActiveWorkbook.SaveAs _ FileFormat:=51, _ Filename:=Application.ThisWorkbook.Path & "\Udfyldte Indleveringsplaner\Excel\" & Date & "\" & ActiveSheet.Name & " Kl. " & tid & ".xlsx" 'Assume it is the active workbook you wanted to close... ActiveWorkbook.Close Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub