我试图做一些看似简单的事情,但继续给我带来麻烦。
将活动工作表复制到没有公式的新工作簿中。
我已经尝试过以下代码:
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答案中的代码时的结果示例。
复制后,部分数据明显丢失
答案 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