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

时间:2017-05-11 13:56:12

标签: excel vba excel-vba

我试图做一些看似简单的事情,但继续给我带来麻烦。

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

我已经尝试过以下代码:

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答案中的代码时的结果示例。

The original sheet 复制前的原始工作表。

The copied sheet 复制的表格

复制后,部分数据明显丢失

1 个答案:

答案 0 :(得分:1)

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

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