我在Excel VBA模块中有一个简单的SUB,几乎可以立即运行,并且可以向用户提供控制,没有明显的延迟 - 但只有当我从Excel的Alt-F8公共子列表中运行sub时才会这样做。
当我通过从按钮或形状启动它来运行相同的子时,它仍然几乎立即运行但是在完成时需要大约3秒来将控制权交还给用户。在此暂停期间,屏幕上会显示Windows忙碌圈图标,Excel不响应任何按键操作。
那么,为什么从按钮启动一个sub可以与从Alt-F8启动一样不同呢?
(我知道sub本身运行得很快,因为我用Timer包装器测试它,确认实际代码运行时间不到0.1秒)
代码显示在这里,但我认为这几乎无关紧要,因为正在运行相同的代码,但只是通过不同的方式启动。
Public Sub RefDel()
IX = ActiveCell.Row: IY = ActiveCell.Column
If Cells(IX, 2) = "R" And (IY = PlnNor Or IY = PlnRef) Then
II = MsgBox("Remove Reference?", 292, Cells(IX, PlnRef))
If II = vbYes Then
ProtOff
NOF = Cells(IX, PlnNor)
Rows(IX & ":" & IX + NRoRef - 1).Delete Shift:=xlUp
Do While Cells(IX, 2) = "R" ' Renumber subsequent rows
Cells(IX, PlnNor) = NOF
NOF = NOF + 1
IX = IX + NRoRef
Loop
Cells(IX - NRoRef, PlnRef).Select
ProtOn
End If
Else
MsgBox "Select a Reference", vbCritical, "Delete Reference"
End If
End Sub