繁体   English   中英

VBA监视新文件的文件夹

[英]VBA monitor folder for new files

所以我正在尝试编写一个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-added-to-a-夹/

但事情就是这样:看起来每个人都使用这些示例的方法是将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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM