VBA监视文件夹的新文件

所以我想写一个VBA程序,将监视一个文件夹的新文件,然后做他们的东西。 我发现了一些使用WMI API的有希望的例子:

在没有轮询的情况下接收在VBA中创build文件的通知

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-added-to-a-夹/

但事情是这样的:看起来每个人都用这些例子来把VBA作为一个macros来连接到Excel电子表格。 人们把Excel当成穷人的编程环境。 很公平。 问题是,我需要这个运行,当用户closures了这个macros与魔术Excel文件。

事情告诉我,我需要在Visual Studio中用VB6.0或C#做一个完整的Windows应用程序,并在后台运行应用程序作为某种计划任务。 这是正确的道路,还是有一些简单的,我错过了这些Excel / VBA教程?

(对这个问题的一般性表示抱歉,我知道社区对具体问题表示赞赏。)

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

VB6是可以编译成exe的VBA。 VB6像Office一样托pipeVBA语言。

InstanceCreationEvent

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 

InstanceModificationEvent

 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 

InstanceDeletionEvent

 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 

我不认为Excel是这种需求的一个很好的解决scheme。 那么使用VB.NET来完成这项工作呢?

http://www.dreamincode.net/forums/topic/150149-using-filesystemwatcher-in-vbnet/

是的,这是过度的,但是如果你深入了解,你会发现你可以用VB.NET做的其他各种非常酷的事情。 我喜欢和Excel一起工作,但是我真的是使用正确的工具来支持这个工作的巨大支持者。

好的,我find了一个解决scheme。 这不是很好,但你可以复制本教程中find的代码:

https://msdn.microsoft.com/en-us/library/aa383665(v=VS.85).aspx

变成一个macros的macros,它几乎可以不加修改地工作,调度即使在Excelclosures后也会发生的任务。 解决scheme是使用VBA来获取任务调度程序的实例

 Set service = CreateObject("Schedule.Service") call service.Connect() 

然后执行该对象上的所有详细configuration来安排任务。 从那里只有一个跳跃和一个跳跃,写一个其他的macros,实际上会做文件夹上的行为。