【问题标题】:Slow Workbook_Open event慢工作簿_打开事件
【发布时间】:2015-11-16 03:47:28
【问题描述】:

由于在 workbook_open 事件中运行了许多宏,我有一个工作簿需要 6 秒以上才能打开。

我想加快速度,所以我使用了一个计时器来测试代码在启动时的不同部分与在工作簿打开时运行的不同部分。除了这部分之外,所有部分在这两种情况下都需要相同的时间来运行:

Dim ATime As Double
Dim BTime As Double

ATime = timer

Dim b As Long
For b = 5 To 268
    If Sheets("Orders").Range("F" & b) = "Locked" Then
        Sheets("Orders").Range("C" & b).Locked = True
        Sheets("Orders").Range("D" & b).Locked = True
        Sheets("Orders").Range("E" & b).Locked = True
    End If
Next

BTime = timer
MsgBox "1. " & Format(BTime - ATime, "0.00 \s\ec")

在 workbook_open 运行时:2.78 秒。在工作簿中手动运行时:0.01 秒。

这里有什么问题?

【问题讨论】:

  • 尝试使用With Sheets("Orders")并将Range()更改为Cells()...这样会节省很多时间...还要更改默认锁定?最好像If Not .Cells(b, 3).Locked Then .Cells(b, 3).Locked = True一样检查...所有这些都可能会加快进程本身...但是,不幸的是我不知道为什么时间上有这么大的差距:/
  • 你能改变宏运行的顺序吗?如果这样做,这是否会更改此宏运行所需的时间?

标签: vba excel micro-optimization


【解决方案1】:

试试:

With Sheets("Orders")
    For b = 5 To 268
        .Range("C" & b).Resize(1, 3).Locked = (.Range("F" & b) = "Locked") 
    Next
End With

【讨论】:

  • 这与原来的不太一样 - 它可以解锁一些单元格,而原来的永远不会。我不能说这是否重要!
  • 公平地说,这很可能无关紧要!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-12
  • 2016-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多