VBA中的异步通知

Posted

技术标签:

【中文标题】VBA中的异步通知【英文标题】:asynchronous notification in VBA 【发布时间】:2018-08-08 09:00:06 【问题描述】:

我目前正在尝试编写一个需要在表单中设置通知栏的脚本。脚本本身负责创建发票,效果很好。但是,我想在标签中显示错误和信息。标签已经在一个框架中,我也有以下代码:

    Private Function notificate(msg As String, Optional title As String)
        lbl_notification.Caption = msg

        If Not IsEmpty(title) Then
            frm_notification.Caption = title
        Else
            frm_notification.Caption = ""
        End If

        frm_notification.Visible = True

        Application.Wait (Now + TimeValue("0:00:10"))

        frm_notification.Visible = False

        frm_notification.Caption = ""
        lbl_notification.Caption = ""
        notificate = True
    End Function

(我不确定它应该是子程序还是函数。)

如果可能的话,如何让这个功能发挥作用,以便我可以同时使用我的表单?

【问题讨论】:

您可能对***.com/questions/39224308/…感兴趣 只是为了让你知道:与名词notification对应的动词是to notify。 (你选择的词可能也能被理解,只是听起来有点好笑。) @inarion 哦 ^^ 谢谢你。是的,如果有一些错误,我很抱歉。我来自德国 无需感到抱歉。我们都会犯错。进步主要来自练习。所以继续这样做。 :) 关于您的实际问题:我强烈建议您查看上面发布的链接@Andre。尝试在本机 VBA 中实现它会涉及很多混乱的Application.Run 调用,我猜。 【参考方案1】:

嗯,我试了几次,终于搞定了。同时,我的子程序如下所示:

    Private Sub notificate(msg As String, Optional title As String)
        ofEvent = False

        lbl_notification.Caption = msg
        If Not IsEmpty(title) Then
            frm_notification.Caption = title
        Else
            frm_notification.Caption = ""
        End If

        frm_notification.Visible = True
        frm_notification.Transparency = 0.5

        For i = 1 To 1000000
            DoEvents
            If ofEvent Then
                GoTo GoOn
            End If
        Next i

    GoOn:

        frm_notification.Visible = False

        frm_notification.Caption = ""
        lbl_notification.Caption = ""
    End Sub

正如你已经想象的那样,以下是我的点击功能框架

    ofEvent = True

and ofEvent 是一个全局布尔变量

【讨论】:

以上是关于VBA中的异步通知的主要内容,如果未能解决你的问题,请参考以下文章

异步通知实验

linux设备驱动中的异步通知机制

linux设备驱动中的异步通知机制

Gevent中的同步与异步详解

异步通知

Linux通信之异步通知模式