VBA监视器文件夹中的新文件

Cod*_*Owl 5 vb6 excel vba excel-vba

因此,我试图编写一个VBA程序,该程序将监视文件夹中的新文件,然后对它们进行处理。我发现了一些使用WMI api的有前途的示例:

无需轮询即可在VBA中接收文件创建的通知

http://www.mrexcel.com/forum/excel-questions/211547-monitor-new-files-folder.html

https://blogs.technet.microsoft.com/heyscriptingguy/2004/10/11/how-can-i-automatically-run-a-script-any-time-a-file-is-add-to-a-夹/

事情是这样的:似乎每个人对待这些示例的做法都是将VBA作为宏连接到Excel电子表格中。人们将Excel视为穷人的编程环境。很公平。问题是,当用户使用宏关闭该不可思议的excel文件时,我需要运行该文件。

有人告诉我,我需要使用VB6.0或C#在Visual Studio中制作一个完整的Windows应用程序,并作为某种计划任务在后台运行该应用程序。这是正确的路径吗?或者在这些Excel / VBA教程中缺少一些简单的东西吗?

(对问题的一般性表示歉意。我知道社区对此表示赞赏。)

小智 4

VBA 和VBScript 类似。对于 WMI 来说几乎相同。这是三个脚本。您还可以将 WMI 与事件处理程序连接起来,这样您就可以拥有多个事件,而不是如此处所示的一个事件。

VB6是可以编译成exe的VBA。VB6 与 Office 一样承载 VBA 语言。

实例创建事件

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
("SELECT * FROM __InstanceCreationEvent WITHIN 10 WHERE Targetinstance ISA 'CIM_DirectoryContainsFile' and TargetInstance.GroupComponent= 'Win32_Directory.Name=""c:\\\\scripts""'")
Do
    Set objLatestEvent = colMonitoredEvents.NextEvent
    Wscript.Echo objLatestEvent.TargetInstance.PartComponent
Loop
Run Code Online (Sandbox Code Playgroud)

实例修改事件

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
("SELECT * FROM __InstanceModificationEvent WITHIN 10 WHERE Targetinstance ISA 'CIM_DirectoryContainsFile' and TargetInstance.GroupComponent= 'Win32_Directory.Name=""c:\\\\scripts""'")
Do
    Set objLatestEvent = colMonitoredEvents.NextEvent
    Wscript.Echo objLatestEvent.TargetInstance.PartComponent
Loop
Run Code Online (Sandbox Code Playgroud)

实例删除事件

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
("SELECT * FROM __InstanceDeletionEvent WITHIN 10 WHERE Targetinstance ISA 'CIM_DirectoryContainsFile' and TargetInstance.GroupComponent= 'Win32_Directory.Name=""c:\\\\scripts""'")
Do
    Set objLatestEvent = colMonitoredEvents.NextEvent
    Wscript.Echo objLatestEvent.TargetInstance.PartComponent
Loop
Run Code Online (Sandbox Code Playgroud)