我创建了一个循环(昨天工作得很好),复制了一系列单元格,然后将它们的值相对于每个单元格向右粘贴一个单元格。该范围由91个单元格组成,它们全部由标题分隔,因此我无法全部选择它们并粘贴这些值,因为#34;不适用于多个选项。"我们的想法是复制"当前日期"进入"前一天"范围。
所以今天当我运行宏时,它非常慢,每秒大约1个单元。几秒钟后Excel变得没有响应,但我仍然可以看到它在屏幕上做了什么。当&#34;光标&#34;导致屏幕向下滚动,有一个灰色区域通常是工作表的其余部分,你知道什么是非响应窗口的样子。一旦光标击中那个灰色区域,循环开始快速进入并在一秒钟内完成。最初的CPU使用率<1%,但一旦发生这种情况就会上升到25%左右。
我将循环放在它自己的子程序中,因为它是更大日期和其他值的更大宏的一部分,但没有效果。当我删除那个循环时,另一个宏(没有其他循环)运行得很好。
任何帮助都将不胜感激。
这是循环的代码:
Sub PreviousDay()
Dim CDay As Range
Set CDay = Range("CurrentDay")
For Each Cell In CDay
Cell.Copy
Cell.Offset(0, 1).PasteSpecial Paste:=xlPasteValues
Next Cell
Application.CutCopyMode = False
End Sub
答案 0 :(得分:2)
你根本不需要循环:
Sub PreviousDay()
With Range("CurrentDay")
.Offset(, 1).Value = .Value
End With
End Sub
编辑:如果它不是一个连续的范围,你需要循环,但你可以按区域循环:
Sub PreviousDay()
Dim rgArea as Range
For each rgArea in Range("CurrentDay").Areas
rgArea.Offset(, 1).Value = rgArea.Value
Next rgArea
End Sub
答案 1 :(得分:1)
您可以尝试这样:
export class AppPreview {
@Input() childTmpl: string;
ngOnInit() {
console.log(this.childTmpl);
}
}
我改变了什么:
Option Explicit
Sub PreviousDay()
Dim rngCell As Range
Dim CDay As Range
Set CDay = [CurrentDay]
For Each rngCell In CDay
rngCell.Offset(0, 1) = rngCell
Next rngCell
End Sub
对于变量来说真是个坏名字,只要它是VBA中的对象Cell
答案 2 :(得分:0)
这会有所帮助:
试试这个Cell.Offset(0, 1).Value = Cell.Value
而不是:
Cell.Copy
Cell.Offset(0, 1).PasteSpecial Paste:=xlPasteValues
答案 3 :(得分:0)
您可以直接指定值而无需复制和粘贴,这应该更快,更“流畅”:
Sub PreviousDay()
Dim CDay As Range
Set CDay = Range("CurrentDay")
For Each cell In CDay
cell.Offset(0, 1).Value = cell.Value
Next cell
End Sub
也许计算链接的单元格或Screenupdating也是一个制动器,所以你可以禁用它:
Sub PreviousDay2()
Dim CDay As Range
Set CDay = Range("CurrentDay")
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
For Each cell In CDay
cell.Offset(0, 1).Value = cell.Value
Next cell
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub