2016-04-28 16 views
2

私は新しいファイルのためのフォルダを監視し、それらといっしょにするVBAプログラムを書こうとしています。新しいファイルのためのVBAモニタフォルダ

Receive notification of file creation in VBA without polling

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-folder/

しかし、ここでのことだ:私は、WMI APIを使用して、いくつかの有望な例を見つけた電線にタック誰もがこれらの例にとるように思えていますVBAをマクロとしてExcelスプレッドシートに追加します。人々はExcelを貧しい人のプログラミング環境として扱います。けっこうだ。問題は、ユーザーがマクロを使ってこの魔法のエクセルファイルを閉じたときに実行する必要があることです。

私はVB6.0またはC#でビジュアルスタジオでフルウィンドウアプリケーションを作成し、何らかの種類のスケジュールされたタスクとしてバックグラウンドでアプリケーションを実行する必要があることを示しています。それが正しい道か、Excel/VBAのチュートリアルに欠けているものがありますか?

(質問の一般性について謝罪。私はコミュニティが具体的な質問を高く評価していることを知っているが。)

+2

* Excelは貧しい人のプログラミング環境以外のものですか? –

+2

VBAは* Visual Basic for Applications *の略で、MS Officeの一部であるアプリケーションの境界内でのみ動作することを理解していますか?したがって、**これらのアプリケーションのいずれかでコード**を実行する必要がありますか?そして、VBAはExcelスプレッドシートまたはWord文書の外部で実行することも、<他のすべてのOfficeアプリケーションをここに挿入することもできません>。それで、スタンドアロンプ​​ログラムには使えないのですか? VBAはOfficeアプリケーション*のプログラミング言語です。 –

+0

はい、私はそれを手に入れます。私の本能はVBAを一斉に避けることですが、クライアントはそれを愛しています。したがって、私は「私はなぜこれを行うためにマクロを作っていませんでしたか?そして今、私はそれを持っています。 – CodeOwl

答えて

2

VBAとVBScriptが類似しています。 WMIの場合とほとんど同じです。ここに3つのスクリプトがあります。 WMIをイベントハンドラでワイヤリングすることもできます。ここで示すように、複数のイベントを1つのイベントではなく複数持つことができます。

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 
-1

Ok - 私はこれのための解決策を見つけた。それはかなりありませんが、あなたは、このチュートリアルで見つけたコードの宣伝文をコピーすることができます。

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

Excelにマクロと、それはExcelが閉鎖した後も発生しますタスクをスケジュールし、ほとんど変更することなく動作します。解決策は、タスクスケジューラ

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

のインスタンスを取得し、タスクをスケジュールするために、そのオブジェクト上の冗長構成のすべてを実行するために、VBAを使用することです。そこからは、スキップホップとジャンプだけで、実際にフォルダー上で行為を行う他のマクロを書くことができます。

0

Excelはこの種のニーズに適したソリューションではないと思います。 VB.NETを使って作業するのはどうですか?

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

はい、それはやり過ぎだが、あなたはそれに入るならば、あなたはVB.NETで行うことができ、他の本当にクールなもののすべての種類を見つけることができます。私はExcelでの作業が大好きですが、私は実際に仕事に適したツールを使用していることを誇りにしています。

+0

私はもっと同意できませんでした。しかしそれはクライアントのためです。そして、理由のためにクライアントは絶対にマクロでそれを持っていなければなりません。私はそれらから話をしようとしましたが、彼らはExcelマクロとしてこれを行うことで死んでしまっています。 – CodeOwl

関連する問題