如何使用 VBA 在 Excel 上发出 Toaster 通知

How to make Toaster Notification on Excel with VBA

我想在 Excel 上 create/use 烤面包机通知。因为我们已经使用 MsgBox 来通知用户有事情发生了。

但它使脚本停止(暂停)。

你知道怎么做吗? 在 google 上有“系统托盘通知”,但它需要大量代码,而且这是一种旧方法。找不到有没有新的方法。

例如,来自 SAP 的插件:“Analysis For Office”将通知放在 Excel。

我研究了一次,几乎完全放弃了,直到我找到了一种相当 'cheaty' 的方式来提醒用户信息而不暂停执行,它适用于我的用户机器。

我们 运行 Windows 10 在这里安装了 SCCM 用于软件分发和更新。我绝对 不知道 在 Windows 中更新是否是强制性的,所以我不知道这是否适合你..但下面的代码可以解决问题如果您不介意类似软件中心通知的通知,请在此处查看:

Sub Toastnote(ccmTitle, ccmText)
    Shell "c:\windows\ccm\sctoastnotification.exe """ & ccmTitle & """ """ & ccmText & """ "
End Sub

你可以这样调用它:

toastnote "title goes here","message goes here" 

它会创建一个如下所示的小弹出窗口:

正如我所说,这有点作弊,可能会让经常收到 CCM 通知的用户感到困惑,但对于我的用户群来说,这不是问题。

最后,可能值得将其包装在检查 .exe 文件是否存在的 IF 语句中 - 只是一个想法..

使用 SAP 的插件 "Analysis For Office",您可以定义消息并将它们添加到标准 SAP-AnalysisForOffice 消息对话框中:

Dim lResult As Long

lResult= Application.Run("SAPAddMessage", "This is a new error message!", "ERROR")

The message 'This is a new error message' with severity Error is displayed in the message dialog.

它会和我的问题一起发送的图片一样。

Source

Details about SAPAddMessage

我也有类似的需求(主要是为了调试)

我的解决方案是弹出一个带有单个标签控件的小窗体,并在 4 秒后卸载它。表单属性设置为不显示模态等

在 VBA "Module"

Private mFrmToast As frmToast
Public Sub clearToast()
    On Error Resume Next
    If Not mFrmToast Is Nothing Then


        mFrmToast.Hide
        Unload mFrmToast

        Set mFrmToast = Nothing

    End If
End Sub
Public Sub showToast(message As String)
    On Error GoTo er_clear_in_4
    If mFrmToast Is Nothing Then
        Set mFrmToast = New frmToast
    End If
    mFrmToast.message = message
    If Not mFrmToast.Visible Then
        Call mFrmToast.Show(False)
    End If
    er_clear_in_4:
    Application.OnTime Now + TimeValue("00:00:04"), "clearToast"

End Sub

表单 "code behind" 模块仅包含示例写入 属性、"message"。

Option Explicit

Public Property Let message(ByVal sMessage As String)
  lblMessage.Caption = sMessage
End Property

用法很简单 showToast("your message here")