excel vba减慢excel下降,造成10秒钟的蛋计时器延迟点击纸张上的任何地方

我正在使用以下vba代码即时通讯使用隐藏一组行和取消隐藏行取决于如果一个单元格中包含文本或没有,他们正在导致我的Excel电子表格慢和无响应,并导致蛋计时器显示10秒。

如果我把代码拿出来,它会加快速度,所以我可以怎样做我的代码,让他们加快速度,而不是那么长时间? 也许有一个更好的方法来构build代码,但即时通讯真的新vba所以我不知道我需要做什么,将不胜感激某人的帮助谢谢。

我使用工作表更改和工作表select更改的原因是,无论用户是否单击单元格或不是页面仍然更新

Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Range("K22").Value <> "" Then Application.ScreenUpdating = False Rows("25:38").EntireRow.Hidden = False Rows("40:48").EntireRow.Hidden = True ElseIf Range("K22").Value = "" Then Rows("25:38").EntireRow.Hidden = True Rows("40:48").EntireRow.Hidden = False End If Application.ScreenUpdating = True End Sub Private Sub Worksheet_Change(ByVal Target As Range) If Range("K22").Value <> "" Then Application.ScreenUpdating = False Rows("25:38").EntireRow.Hidden = False Rows("40:48").EntireRow.Hidden = True ElseIf Range("K22").Value = "" Then Rows("25:38").EntireRow.Hidden = True Rows("40:48").EntireRow.Hidden = False End If Application.ScreenUpdating = True End Sub 

主要问题是从Worksheet_Change事件,但它可以适用于任何事件。

每当您隐藏列时,工作表变化都会触发,所以在(最终)出现内存不足错误之前,它会尝试多次隐藏相同的列:

隐藏这些列…哦,工作表更改…隐藏这些列…哦,工作表更改…隐藏…

为了避免这种情况,你需要使用

 Application.EnableEvents = False 

当你决定你要做出改变的时候

 Application.EnableEvents = True 

完成后。
您可能还想要进行一些error handling,将事件再次打开,就像发生其他情况一样,停止运行代码,触发器将被closures,电子表格将不再按照您的预期更新。

 Private Sub Worksheet_Change(ByVal Target As Range) Application.ScreenUpdating = False Application.EnableEvents = False If Range("K22").Value <> "" Then Rows("25:38").Hidden = False Rows("40:48").Hidden = True Else Rows("25:38").Hidden = True Rows("40:48").Hidden = False End If Application.EnableEvents = True Application.ScreenUpdating = True End Sub 

这对我来说是即时的:

 Application.ScreenUpdating = False Select Case Range("K22") Case Is <> "" Rows("25:38").Hidden = False Rows("40:48").Hidden = True Case Else Rows("25:38").Hidden = True Rows("40:48").Hidden = False End Select Application.ScreenUpdating = True