知ってりゃトクする事ばかり

知ってると知らないとじゃ大違い!オトクな情報が盛りだくさんなブログ・・・にしたいな(笑)

【エクセル】なんちゃってVBAで共有ファイルへの同時書き込みを回避

f:id:tokushitai:20160629104520j:plain

 

こんちくわ あ゛じです。

ひさしぶりにエクセル関連のお話でも。

サーバーの共有ファイルにデータを書き込み

ここ数日、サーバーに置いてある1つのエクセルファイルに、複数のPCからデータを上書き保存する場合のマクロについて考えてた。

もし、そのデータファイルを誰かが開いていたら、「読み取り専用」になっちゃうので問題が発生してしまう。

 

手動だったら、あ~、読み取り専用だから今は書き込み出来ないなぁ~って判断出来るけど、マクロで動作している時はどうしたら良いのかな?って。

 

そのファイルを開けば、読み取り専用かどうか判断する方法はあるみたいだけど、なんとなく、開かないで判断したい。

オレのは、なんちゃってVBA

いつものごとく、一生懸命、ネットで情報を探しましたよ。

でも、それらしきコードは発見出来なかった。

なんとなく、これを応用すれば良いのかな?ってのはあるんだけど、難しくてよくわからんw

オレ、見よう見まねでVBAやってるレベルですからw

たぶん、プロがオレのコード見たら、なんじゃコリャ!?ってなるw

視点を変えてみる

どうしようかぁ~・・・う~ん、う~ん・・・。

こうなりゃ、一休さんになるしかないっ!

 

ポクポクポクポク・・・

 

f:id:tokushitai:20170302144309p:plain

 

ひらめいた!!!

番人を連れていこう!

f:id:tokushitai:20170302151054p:plain

そのデータファイルを開く前に同フォルダ(違くてもいいけど)に番人のファイルを作る。

データファイルを開いて書き込み、上書き保存したら番人を連れて帰る(削除)

こうしておけば、誰かが書き込みしている時は番人がいるワケだから、あとは番人がいる時は書き込みを待つように指示すれば良い。

(データファイルへの書き込みは、どのPCもマクロで行うから、実際の待ち時間はわずか)

 

'番人いるの?

 If Dir("\\サーバー\フォルダ\番人.xlsx") = "" Then

'番人がいない場合

番人を作る。

Else

'番人がいる場合

番人がいなくなってから番人を作る。

End If

データファイルに書き込み。

帰るぞ!番人!

ってカンジで。

 

どお?どお?

読み取り専用かどうかという視点から離れ、全然違う方法で問題が解決出来たんじゃないかな?

(まだ動作確認してないけど)

 

プロの人達からすれば、そんなことかよ!って思うんだろうけどね。

素人のオレにとっては、スカートのファスナーを全開にしたまま歩いてるお姉さんを見つけたくらいの喜びなのだw

さいごに

エクセルってマクロに限らず関数なんかでも、トンチをきかせたようなやり方で問題が解決することって結構ある。

そういうのを思いついて成功した時、

オレって天才じゃね!?

とか思うんだよねw

それが楽しからエクセル好きなんだよなぁ。

 

Office 2007は10月でサポート終了ですよ。

Microsoft Office Home and Business 2016 (最新)|カード版|Win対応

Microsoft Office Home and Business 2016 (最新)|カード版|Win対応