この話の前提
- 複数人で同時使用するAccess製システムの起動(ローカルにフロントエンドデータベースをコピー)をVBSでやっている
- ユーザーはVBSのショートカットをローカルに置き、そこから起動する
- VBS内に起動モード切り替えフラグを設置し、不具合対応やメンテナンスの時はVBSを編集してフラグを切り替える
VBSのショートカットではなくコピーしたVBSをローカルに置いている人がいるらしく、VBSを編集してフラグを切り替えたにも関わらずログインするユーザーが現れるという状況になった。
その場合、こちらではどうしようもできず……
「フラグを記載したファイルを別途用意し、システム本体を開く時に読み込んでフラグをチェックすればいいのでは?」ということでプチ改造。
ついでにVBSのフラグ切り替えもファイル読み込み式に統一。
起動フラグ用のテキストファイルを用意
名前:SystemOpenFlg.txt
文字コード:ANSI
名前はなんでもいいのでわかりやすいものに。
文字コードは「名前を付けて保存」で「ANSI」に変更。
他の文字コードだと後の処理で日本語が文字化けしてエラーになる。
今回処理に使うのは1行目と2行目なので、それ以降はメモとして使用可能。
0 完了予定時間:16時00分頃 ------------------------------ 1行目:フラグ番号 0:通常起動 1:不具合対応 2:メンテナンス 2行目:不具合対応やメンテナンスの完了予定時間
Access本体に処理を追加
一番最初に開かれるフォームのForm_Open
に処理を入れる。
説明
FileSystemObjectのOpenTextFile("パス").ReadAll
で「SystemOpenFlg.txt」の全行を読み込み、Split
を使って改行vbCrLf
で区切った配列arrL
を作成。
arrL(0)
が1行目(フラグ番号)なのでflgOpen
に、
arrL(1)
が2行目(完了予定時間)なのでstrEndTime
に入れる。
flgOpen
の値によって処理を変更し、メンテナンスメッセージにはstrEndTime(完了予定時間)
の表示も行う。
Dim FSO As Object: Set FSO = CreateObject("Scripting.FileSystemObject") '参照設定しない場合に使用 'Dim FSO As New FileSystemObject '参照設定:Microsoft Scripting Runtime Dim arrL As Variant, flgOpen As Integer, strEndTime As String arrL = Split(FSO.OpenTextFile("SystemOpenFlg.txtのフルパス").ReadAll, vbCrLf) flgOpen = CInt(arrL(0)) strEndTime = arrL(1) If flgOpen <> 0 Then If flgOpen = 1 Then MsgBox "不具合対応中のためシステムを開くことができません。" & vbCrLf & "時間を置いてやり直してください。", , "システム名": Application.Quit If flgOpen = 2 Then MsgBox "システムメンテナンス中です。" & vbCrLf & "しばらくお待ちください。" & vbCrLf & strEndTime, , "システム名": Application.Quit End If
起動用VBSに処理を追加
Access起動処理より前に入れる。
処理の内容はAccess側と同じなので説明は省略。
Dim FSO, arrL, flgOpen, strEndTime Set FSO = CreateObject("Scripting.FileSystemObject") arrL = Split(FSO.OpenTextFile("SystemOpenFlg.txtのフルパス").ReadAll, vbCrLf) flgOpen = CInt(arrL(0)) strEndTime = arrL(1) If flgOpen <> 0 Then If flgOpen = 1 Then MsgBox "不具合対応中のためシステムを開くことができません。" & vbCrLf & "時間を置いてやり直してください。", , "システム名": WScript.Quit If flgOpen = 2 Then MsgBox "システムメンテナンス中です。" & vbCrLf & "しばらくお待ちください。" & vbCrLf & strEndTime, , "システム名": WScript.Quit End If