Цитата |
---|
написал: чем при прямом копировании. |
А прямое копирование разве проходит мимо буфера обмена?
Мои результаты: Excel 2013 (64)
test1: 17,46
test2: 13,71
test3: 0,71
Второй раз:
test1: 30,61
test2: 0,71
test3: 1,17
Третий раз:
test1: 0,48
test2: 0,69
test3: 0,68
Четвертый раз:
test1: 0,5
test2: 1,17
test3: 0,71
В 1м и 2м случае включен журнал буфера обмена, во 3м и 4м- выключен
Тест на рабочем компе (Excel 2016, 32) с антивирусом в параноидальном режиме
включен журнал буфера обмена:
test1: 1,3
test2: 33,36
test3: 3,91
выключен журнал буфера обмена:
test1: 1,56
test2: 32,58
test3: 3,24
включен журнал буфера обмена:
test1: 30,953125
test2: 2,9375
test3: 1,83203125
включен журнал буфера обмена:
test1: 1,09375
test2: 31,96875
test3: 2,01171875
Немного поменял код, очистка перед каждым этапом, результаты копируются в ячейку.
Код |
---|
Sub test1()
Dim n As Integer
Dim t As Double
Dim log As String
Dim calcMode As XlCalculation
Application.ScreenUpdating = False
Application.EnableEvents = False
calcMode = Application.Calculation
Application.Calculation = xlCalculationManual
With ActiveSheet
.Columns(2).Clear
t = Timer
For n = 1 To 100
.Cells(n, 1).Copy .Cells(n, 2)
Next n
log = "test1: " & Timer - t
.Columns(2).Clear
t = Timer
For n = 1 To 100
.Cells(n, 1).Copy
.Cells(n, 2).PasteSpecial
Next n
log = log & vbLf & "test2: " & Timer - t
.Columns(2).Clear
t = Timer
For n = 1 To 100
.Cells(n, 2) = .Cells(n, 1)
.Cells(n, 1).Copy
.Cells(n, 2).PasteSpecial xlPasteFormats
Next n
log = log & vbLf & "test3: " & Timer - t
.Columns(2).Clear
t = Timer
For n = 1 To 100
.Cells(n, 2) = .Cells(n, 1)
.Cells(n, 2).NumberFormat = "0.000"
Next n
log = log & vbLf & "test4: " & Timer - t
'MsgBox log
.Cells(1, 8) = log
End With
Application.CutCopyMode = False
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = calcMode
End Sub
|