如何使用 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.
它会和我的问题一起发送的图片一样。
我也有类似的需求(主要是为了调试)
我的解决方案是弹出一个带有单个标签控件的小窗体,并在 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")
我想在 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.
它会和我的问题一起发送的图片一样。
我也有类似的需求(主要是为了调试)
我的解决方案是弹出一个带有单个标签控件的小窗体,并在 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")