首页 > 解决方案 > VBA 如何更快地循环?[X < 0.51 秒]

问题描述

循环频率

  Dim I As Long
  For I = 1 To 200

循环间隔(VBA 中止了不到 0.51 分钟?!)[这是这里的问题.....]

  Dim X As Long
  X = 0.51 
  Dim EndTime As Date

开始循环

  For Each Contr In Yard.Controls

设置条件

  If Contr.Name = "X" And Userform1.Loop_Textbox.Value = 1 Then

闪光 1

  EndTime = DateAdd("s", X, Now())
  Do While Now() < EndTime
  DoEvents
  If Userform1.Loop_Textbox.Value = 0 Then Exit Do
  Loop
  Contr.BackColor = &H80000012&
  Contr.SpecialEffect = fmSpecialEffectEtched

闪光 2

  EndTime = DateAdd("s", X, Now())
  Do While Now() < EndTime
  DoEvents
  If Userform1.Loop_Textbox.Value = 0 Then Exit Do
  Loop
  Contr.BackColor = &H80000012&
  Contr.SpecialEffect = fmSpecialEffectFlat

结束

  End If

  Next Contr

  Next I

标签: excelvba

解决方案


Date准确性不足以跟踪那么短的时间段。而是使用定时器功能

这是一个示例,让选定的单元格背景颜色闪烁 11 次(从白色到黑色),中间有 0.51 秒的停顿:

Public Sub Blink()
    Dim i As Long
    For i = 0 To 10
        Dim StartTime As Single
        StartTime = Timer

        Do While StartTime + 0.51 > Timer 'wait 0.51 s
            DoEvents
        Loop

        If Selection.Interior.ColorIndex = 1 Then
            Selection.Interior.ColorIndex = 2
        Else
            Selection.Interior.ColorIndex = 1
        End If
        DoEvents
    Next i
End Sub

在此处输入图像描述 图 1:单元格 A1 的颜色变化了 11 次。


推荐阅读