2017-06-04 6 views
1

私が目指しているのは、他のユーザーが同じVBAマクロを実行していないかどうかを確認するために現在実行中のすべてのスクリプトのリストを取得することです。同じ時間(もしそうなら、コードなどを停止する、以下の質問のOPが望むものと同様)。これは、共有ワークブックのためのものです(私はそれがこのタイプの作業のために設計されていないことを学んだが、試してみる必要があります)。1人で同時にVBAマクロを実行できない(共有wkb)

https://stackoverflow.com/a/36116091/5947935

私はVBAで上記の解答仕事でコードを作成しようとしてきたが、それはVBSのことだと私はそれを避けたいようです。

私は専門家ではないので、Excel VBAでこれを動作させる方法を理解できません。私はそれが可能かどうかも分かりません。

私もこれを見つけました:VBA Getting program names and task ID of running processesこれはうまくいきますが、実行中のプロセスのみが表示されます。

どのように2つをマージするかはわかりません...またはWMIが正しい方法です。

何か助けていただければ幸いです。

+0

私は間違っているかもしれませんが、私にとってはどちらも1台のワークステーションで実行されているスクリプトをチェックしているようです。 2人の異なるユーザーが共有ブックを開くと、vbaはそのマシンで実行されます。これがAccessの場合は単純でしょうが...クライアント/サーバー環境で実行しているとしますか?その場合は、次のいずれかの操作を行うことができます:(a)サーバー上に隠しファイルを作成し、スクリプトが開始すると、それを排他的に開く(ロックアウトする)。ファイルがロックされているかどうかをチェックするコードがあるかどうかを確認します。または、(b)ワークステーションのリスト(およびおそらくユーザー名)を含むファイルを作成して管理しようとすると、あまりにも多くの問題が発生する可能性があります。 –

答えて

0

私は私のコードが自動オープンに行った最初のものは見たユーザ名に続いて、ワークブックの名前でちょうど空のテキストファイルだった「ロックファイル」を作成するために使用されると.LCK

の延長ロックしているファイルの場合、どのユーザーが開いていたのかをユーザーに報告してから、オープンを取り消します。

ロックファイルが見つからなかった場合は、ロックファイルが作成され、正常に処理されました。もしそれが見つかったら、それは同じユーザー名(つまり、それらのユーザーがクラッシュしていた)、それは開いたままに進んだ。

コードが最後にしたことはファイルを削除することでした。

+0

こんにちはダン、これだけに戻って申し訳ありませんが、私は前にその件名に触れる機会はありませんでした。 私はこのアイデアが大好きで、うまくいきたいと思っています。私はあなたに結果について知らせます。 ありがとうございます! – cloudberry

0

ここでコードや理論はテストされていませんが、別のユーザーが共有ブックでマクロを実行するのを防ぐという考え方には、いくつかの考えが必要です。

私は隠されたワークシートを作成し、マクロが最初に起動されたときにEnviron("USERNAME")を保存するセルの1つを使用します。実行しているユーザーを示し、完了したら先入れ先出しでクリアします。

  1. はMUSERが空の場合、マクロが実行は、それが最初に、チェックしますときに、その後Environ("USERNAME")にそれが価値だ変更した場合、名前付き範囲MUSER(マクロ利用者)がその隠されたワークシート
  2. で範囲A1であると言うことができます次のステップの前にファイルを保存してください(ここでは、他のセッションで値が更新されているとは限りません)。
  3. MUserが空でない場合は、数秒で中断または再試行してください。
  4. マクロが完了すると、MUserはClearContentsになり、ファイルを保存してブックのマクロを解放します。

アイデアはこちらですがテストしてください。トラブルシューティングのために私たち自身のコードを投稿してください。また、このようにマクロを実行するには、 "ロック"にブックイベントを使用することもできます。また、この隠しシートを使ってデバッグ用のログレコードを作成することもできます。また、いくつかのフェイルセーフを実装する必要があります(マクロ開始時のタイムスタンプや数分後にロックを無効にするなど)。

関連する問題