|
こちらのサイトには大変お世話になっており、拝見させていただいております。
このたび、エクセルで作られた様式の原紙をネットワーク上のファイルサーバに置いて、版数管理を行いたいと思っています。
使用者が常にサーバから原紙を出して使ってくれると、こんなことはしなくて良いのですが・・・。
様式が変更になっていることを知らずに(忘れて?)、以前記入して自分で保管している様式の一部の文言を変更
して提出されることが往々にしてあるのです。
そこで、版数のチェック機構を持たせた原紙を作り、それを利用して作成した物を各人で取り込んだ場合でも、
取り込んだ物を起動すると、ネットワークサーバの原紙を参照させようと考えました。
具体的には、初版のサーバ保管原紙のA1セルに版数をゼロと記入します。
その初版をクライアトPCに取り込んでもらいます。
サーバ保管原紙の様式は変更される毎にA1セルの版数を変更した物を保管しておきます。
その後、クライアントPCに保管しているその様式を起動した時に、B1セルにサーバ保管原紙のA1セルを参照する
リンク式を入力させ、自分のA1セルにすでに入っている版数とB1セルで得たサーバ保管原紙の版数を
比較させ、様式変更の有無を判断させようと思っています。
様式自体の運用が中止された場合は、サーバ保管原紙をフォルダーから削除します。
PCがネットワークにつながっていない時の検知と処理はこちらのサイトを参考にして出来たのですが、
運用を中止してフォルダーから削除されている古い様式をクライアントPCで起動すると、参照先が見つからないため
「値の更新」ダイアログが表示されリンク先を指示するように通知が出てしまいます。
ご相談の内容は、この値の更新ダイアログが発される前に感知し、値の更新ダイアログを表示させないで、運用
が中止されている事をオペレータに知らせたいのです。
エクセル2003限定で使えそうな物は見えたのですが、2000でも運用出来る、値の更新ダイアログを制御できそうなものは、
こちらの過去ログやヘルプで調べた範囲では無い様に思えました。
ローバージョンエクセルで運用できる方法を、どなたかご教示頂けませんでしょうか。
運用概略を申しますと、
1.クライアントPCは二十数台有り、エクセルは97から2003まで色々なバージョンが有ります。OSも色々です。
オペレータに相当する者は数十人です。PCに詳しい者もいれば、クリックがままならない者もいます。
2.サーバは1台づつ部署別に有り、それぞれでパス名が異なっています。
3.サーバ保管原紙のブックは、クライアントPCでは読み取り専用で開かれます。
4.1行目は「(行を)表示しない」にしています。
5.B1セルに入力されるリンク式は、起動と同時にリンク更新の画面が出ることを嫌ったので、起動後に式を入力し、
上書き保存する前に削除するようにしています。
6.方法のわからない今は、事前に「注意」と称し、値の更新ダイアログが出たらキャンセルボタンをクリック
するように指示し、その後のエラーをトラップする、ON ERROR で抜けています。
7.マクロは ThisWorkbookに書いており、Const文は Private Sub Workbook_Open()より上方に記入しています。
8.この原紙を管理する方はマクロをほとんど知らないので、あまりややこしくすると、原紙の各ブック毎に
ブック名とシート名などを変数で指定する時に間違う可能性がありますから、長文となってもブック毎に変更する
部分は出来るだけ簡素に、さらに一箇所にまとめて置きたいと思っています。
(このために、変数設定をConstで行い、最上部に書いています。私自身も原紙フォルダーへのパスチェック文は、
ほとんど理解できていないレベルです)
また、このモジュール内だけの記述にしたいと思っています。
9.ブック名やシート名を、nameプロパティーで自動取得すると都合が悪い時があるため、使っていません。
10.エラー発生時にフローが理解できるように、API何たらは使いたくありません。
実際より少し簡素にしていますが以下がチェック機構の現行文です。チェック機構自体にもっと良い方法があれば
それに越したことはございません。よろしくお願いいたします。
'---------------------------------
Const WbName As String = "62_2" 'ブックの名前
Const WsName As String = "管理表" 'シートの名前
Const FuPa As String = "\\SV\原紙" 'ファイルサーバの原紙フォルダ
'---------------------------------
Private Sub Workbook_Open()
'ここから↓ 原紙フォルダにあるファイルを開いた場合は、検知マクロを抜ける ----------
If ActiveWorkbook.Path = FuPa Then
Exit Sub
End If
'ここから↓ 一般注意 --------------------------
MsgBox "この後に 「値の更新」 と題した、ファイル検索の画面が表示された場合は" & vbCrLf & _
"[キャンセル]をクリックして下さい。", vbOKOnly + vbInformation, "ご注意"
'ここから↓ サーバ原紙フォルダにパス(?)が通らなかったら、ネット不良と判断 ----------
If CreateObject("Scripting.FileSystemObject").FolderExists(FuPa) = False Then
MsgBox "ネットワークが不良です。"
ActiveWorkbook.Saved = True
Application.Quit
Else
On Error GoTo エラー
Worksheets(WsName).Range("B1").Value = "='" & FuPa & "\[" & WbName & ".xls]" & WsName & "'!$A$1"
'*****この場所にリンク更新のダイアログが出た場合、その旨表示してブックを閉じる処理をしたい******
If Worksheets(WsName).Range("A1").Value <> Worksheets(WsName).Range("B1").Value Then
MsgBox "この様式は旧版。使用できない。", vbOKOnly + vbCritical
ActiveWorkbook.Saved = True
Application.Quit
End If
End If
Exit Sub
エラー:
MsgBox "この様式は運用を中止している。"
ActiveWorkbook.Saved = True
Application.Quit
End Sub
|
|