人気ブログランキング |

2015年 01月 28日 ( 1 )

会社でいつものように材料入庫の内容をエクセルファイルに追記しようとしたら、なぜかその当該Bookが「読み取り専用」で開かれていることに気がついた。もちろんエクセルVBAでBookを開いてそこに自動的に追記するのだが、「読み取り専用」で開かない設定のはずなのに「読み取り専用」で開いていることに目が点になってしまった。

d0036883_235010100.png
結局、他の人が使用中だったためだったのだが、VBAから開くと上の画像のようなダイアログが出ずに何と自動的に「通知」モードで「読み取り専用」で開かれてしまうようだった。「読み取り専用」では何も出来ん上に、この「通知」というのが結構余計なお世話で、使用者が編集を終えると下の画像のような「通知」が出て教えてくれるのだった。知らずに「読み取り専用」で作業してるとややこしいことになるし何か方法はないかと検索してたら、結局いつもお世話になっている「Office TANAKA」さんの「ブックが開かれているかどうか調べる」というページがヒットした。
d0036883_05950.gif


これはホンマに「なるほどな~」という感じで、エクセルのBookをファイルとして「追記モード」で開き、その時にエラーが出るかどうかで当該ファイルが使用中であるかどうかを判断するという内容だった。これはオモロイということで早速VBAのコードを変更してみたら、「ファイルは使用中です」のダイアログが出てそのまま終了できるようになった。

【参考コード】
On Error Resume Next
Open "C:\Book1.xls" For Append As #1
Close #1
If Err.Number > 0 Then
MsgBox "ファイルは使用中です"
Else
(ここに実行したいコードを記述します)
End If


このコードを実行したいコードの頭に入れ(Else以下に実行コードを記述する)ると、編集したいファイルが使用中の時は「ファイルは使用中です」のダイアログが出て終了し、使用中でない場合のみコードが実行されるようになる。Open以下に編集したいファイルのフルパスを記述する以外は、そのままコピーして使用しても問題ないはず。「On Error Resume Next」、「For Append」、「Err.Number」などについて、詳しくは下のリンクを参考にしてください。

ブックが開かれているかどうか調べる

テキストファイルを操作する

エラーに負けない

by th6969 | 2015-01-28 23:40 | Excel VBA | Comments(0)