我正在尝试在单元格中显示一些提示作为文本,如下所示。
Dim text As String
text = "Hello World"
If Range("A1") = 1 Then
Range("B1") = text
Application.Wait (Now + TimeValue("0:00:05"))
Range("B1") = ""
End If
如果vba只有上面的代码,代码运行得很好但是对于我的情况,在这个“Hint”函数之前有很多代码。每当IF语句变为TRUE时,我的鼠标光标将变成窗口的加载符号,而单元格B1没有显示任何内容。
5秒后,“Hello World”会在细胞B1再次变空之前非常短暂地出现,就像它打算做的那样,但是时间都搞砸了。
我知道这里的硬件可能有问题,但还有其他方法可以解决这个问题吗?
答案 0 :(得分:2)
如果没有看到上述编码,很难诊断出您的具体问题,但您可以尝试以下方法:
Sub Test()
Dim text As String, iLoop As Integer
text = "Hello World"
If Range("A1") = 1 Then
For iLoop = 1 To 5 '5 is the number of seconds to wait
Range("B1") = text
DoEvents
Application.Wait (Now + TimeValue("0:00:01"))
Loop
Range("B1") = ""
End If
End Sub
答案 1 :(得分:2)
一种可能的解决方案是在工作表中处理事件,如下所示:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub
If Range("A1") = 1 Then
Range("B1") = "Hello world"
Application.Wait (Now + TimeValue("0:00:05"))
Range("B1") = vbNullString
End If
End Sub
确保您拥有Application.EnableEvents = True
,以便了解其中的差异。
答案 2 :(得分:2)
由于Application.Wait将CPU耗尽至100%(" 忙等待"),因此最好使用Windows Sleep
您必须在代码顶部添加声明:
Private Declare Sub Sleep Lib "kernel32" (ByVal lngMilliSeconds As Long)
然后,像这样写一个简单的Sub:
Public Sub WaitSeconds(seconds As Integer)
Dim WaitUntil As Date
WaitUntil = DateAdd("s", seconds, Now)
Do While Now < WaitUntil
Sleep 100
DoEvents
Loop
End Sub