Excel VBA - 一段时间后删除文本

时间:2017-09-28 13:04:06

标签: excel vba excel-vba

我正在尝试在单元格中显示一些提示作为文本,如下所示。

    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再次变空之前非常短暂地出现,就像它打算做的那样,但是时间都搞砸了。

我知道这里的硬件可能有问题,但还有其他方法可以解决这个问题吗?

3 个答案:

答案 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