【发布时间】:2017-05-12 00:43:52
【问题描述】:
我正在尝试做一些看似简单,但一直给我带来麻烦的事情。
将活动工作表复制到没有公式的新工作簿中。
我用下面的代码试试运气:
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
这行得通。
但是速度很慢。非常非常慢。我假设这与首先复制工作表并返回复制单元格值有关,所以我想要一种避免这种情况的方法。
这种方式也不会将格式保留在具有多个格式选项的单个单元格中。然而,这是低优先级。
我很想知道是否有更有效的方法来做到这一点。
以下是使用代码的第一个sn-p时的结果示例,或者jkpieterse的答案中的代码。
部分数据被复制后明显丢失
【问题讨论】:
-
“没有公式”是什么意思?粘贴到目的地作为值?将空值粘贴到源代码中有公式的目标位置?
-
我需要用户在查看工作表时看到的值。显然,在所有情况下这都与 .Value 不同,因为第一段代码是不可靠的
-
速度太慢的原因是您正在遍历整个工作簿/工作表。
-
我可以通过简单地说明我需要复制的范围来避免这种情况吗?工作表具有固定大小
-
使用
ws.UsedRange.Copy会快一点,但不多