[英]VBA monitor folder for new files
所以我正在尝试编写一个VBA程序,它将监视一个文件夹中的新文件然后用它们做些什么。 我发现了一些使用WMI api的有希望的例子:
http://www.mrexcel.com/forum/excel-questions/211547-monitor-new-files-folder.html
但事情就是这样:看起来每个人都使用这些示例的方法是将VBA连接到Excel电子表格中作为宏。 人们将Excel视为穷人的编程环境。 很公平。 问题是,当用户用宏关闭这个神奇的excel文件时,我需要运行它。
有些东西告诉我,我需要在Visual Studio中使用VB6.0或C#制作完整的Windows应用程序,并在后台运行应用程序作为某种计划任务。 这是正确的路径还是在这些Excel / VBA教程中我缺少哪些简单的东西?
(对问题的一般性表示道歉。我知道社区对具体问题表示赞赏。)
VBA和VBScript类似。 对于WMI几乎一样。 这是三个脚本。 您还可以使用事件处理程序连接WMI,这样您就可以拥有多个事件而不是一个事件,如此处所示。
VB6是可以编译成exe的VBA。 VB6和Office一样托管VBA语言。
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
好的 - 我找到了解决方案。 它不漂亮,但你可以复制本教程中的代码:
https://msdn.microsoft.com/en-us/library/aa383665(v=VS.85).aspx
进入一个excel宏,它几乎不需要修改就可以工作,安排一个即使在excel关闭后也会发生的任务。 解决方案是使用VBA来获取任务调度程序的实例
Set service = CreateObject("Schedule.Service")
call service.Connect()
然后对该对象执行所有详细配置以安排任务。 从那里它只是一个跳跃跳跃和一个跳转来编写另一个宏,实际上将在文件夹上执行该操作。
我认为Excel不是满足这种需求的好方法。 用VB.NET做这项工作怎么样?
http://www.dreamincode.net/forums/topic/150149-using-filesystemwatcher-in-vbnet/
是的,这太过分了,但如果你进入它,你会发现你可以用VB.NET做的各种其他非常酷的东西。 我喜欢使用Excel,但我真的非常支持使用正确的工具。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.