在Excel 2016中插入列时性能严重下降

时间:2019-01-16 10:12:29

标签: excel vba excel-2016

在Excel 2007中没有问题,但是当我在Excel 2016中单击以下行时,现在每次都需要一分钟以上。列中只有300行。我要做的只是剪切一列并将其粘贴到另一列旁边。

Selection.Insert Shift:=xlToRight

示例代码如下,但是我有30个这样的代码,所以花了半个小时。

Columns("E:E").Select
Selection.Cut
Columns("C:C").Select
Selection.Insert Shift:=xlToRight

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您是否有公式,甚至还有外部参考?然后请尝试以下方法:

ActiveWorkbook.UpdateLinks = xlUpdateLinksNever
ActiveWorkbook.UpdateRemoteReferences = False
Application.Calculation = xlManual

ActiveSheet.Columns("E:E").Cut
ActiveSheet.Columns("C:C").Insert Shift:=xlToRight

ActiveWorkbook.UpdateLinks = xlUpdateLinksAlways
ActiveWorkbook.UpdateRemoteReferences = True
Application.Calculation = xlCalculationAutomatic

' If it's faster, then uncomment following line additionally
' Application.CalculateFull

答案 1 :(得分:0)

我不得不处理由薪资系统生成的 Excel xlsx 文件。不确定是什么导致列插入缓慢。在 88,000 行的文件中插入一列大约需要 25 秒。

我发现如果我将整个工作表作为值和数字格式复制到新工作表中,插入列步骤几乎会立即运行。复制整个工作表部分只需 3 秒!文件中没有公式,也没有条件格式。

这是我使用的逻辑:

' Copy source worksheet
Dim rng As Range
Set rng = Worksheets("Sheet1").Cells
rng.Copy ' note that wks.Cells.Copy is very slow

' add new worksheet
Dim newWks As Worksheet
Set newWks = Sheets.Add(After:=ActiveSheet)
newWks.Name = "Values Only"

' paste values and number format into new worksheet
newWks.Range("A1").Select
' xlPasteValues is fast too
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
' if I also include a xlPasteFormats then the insert column will become very slow once again
'  Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False


' now the column insert is blazingly fast!
newWks.Columns(14).Insert
newWks.Cells(1, 14).Interior.ColorIndex = 35
' etc.