2010年11月11日

2.使用者の履歴を残す

 インターネットの世界では、サーバーサイドプログラムがWEBサイトを閲覧した人々や巡回ロボット(クローラー/スパイダー)の足跡を“アクセスログ”として記録しています。足跡は、そのコンピュータ(携帯電話などPDAも含む)を特定する識別情報で、実際に操作している人間までは特定できません。
 会社のパソコンなどでは、1台のパソコンを複数の人が使うことも想定されます。最近のWindowsマシンでは、 Administretor(アドミニストレーター権限)で予め登録してあるユーザー以外の使用を排除するため、 使用者にパスワードの入力を求めたりもします。
ExcelVBAマクロ
図:BakuJAN活用例では、パスワードを入力しないとログインできないようにしている

 [ BakuJAN活用例.xls ]のユーザーフォームを起動させると、VBAマクロはログインするためのパスワード入力をユーザーに求めます。 予めブックに記録してあるパスワードと照合を行い、入力したバスワードと合致すれば操作を続行できますし、 合致しなければ延々と待受け画面のままで待機します。
 ログイン用のパスワードを知らないユーザーの操作は受け付けず、また、ログインを制限するだけでなく、 ログインに成功した日時・パスワードを履歴として、このブックとは別の外部ファイルに記録するVBAマクロを実行しています。
  •  ★  値が確定して初めて動くExitイベントプロシージャ

  •  ★  外部ファイルが無ければ新規に作成し、データを追記する


     このプロシージャでは、正しいパスワードを入力し終えると、外部ファイル(日付毎に作成される独立したファイル)の存在を VBAマクロが判断し、[ OpenTextFileメソッド ] の引数[ create = True ]によってファイルが無ければ新規に作成し、 ファイルがある場合は[ WriteLineメソッド ]を使って、編集(追加記述)をします。追加される位置は、ファイルの最下行になります。 [ WriteLineメソッド ]の行では、各データは[ "(ダブルクォーテーション) ]で囲まれ、[ ,(カンマ) ]で区切られたフォーマットで記録されます。
     コードの始めにある[ UCase(EdtPass00) ]と[ UCase(Pwd_ad) ]は、それぞれユーザーが入力したパスワードと、 登録してあるログイン用のパスワードが入力されている[ TextBoxコントロール ]の名前で、[ Valueプロパティ ]を返しています。 条件式[ Ifステートメント ]でお互いの値が等しいときに、処理を続けるようになっています。複数のユーザーアカウントとの照合方法は、 別の章で紹介しています。[ Ucase関数 ]は、小文字を大文字に変換する関数で、常に大文字で照合するようにしています。
     パスワードを入力する[ EdtPass00 ]は、[ Changeイベント ]ではなく[ Exitイベント ]を使っています。 ユーザーが、パスワードの入力を完了した意思表示として[ Enterキー ]を押すか、 バーコードスキャナーでバーコードの読み取りが完了したコード(キャリッジターン等)が入力され、フォーカスが他のコントロールに移る際に、 このコードが実行されます。

  •  ★  マルチページコントロールのページを切り替える

     ログの出力が終わると、[ ログイン画面 ]から[ メニュー画面 ]へと切り替えるため、[ MultiPage1 ]の[ Valueプロパティ ]を[ 1 ]に変更します。 ログイン画面には、ユーザーフォームを閉じるために必要な[ 終了ボタン ]を表示していませんから、パスワードを知らない場合は、 強制終了([ Ctrl ] + [ DEL ]やパソコンのコンセントを抜く?)を行う以外に、マクロを中止する手立てもありません。

 扱いやすい [ Changeイベント ]を使った場合は、パスワードが1文字ずつ入力される度にイベントが発生し、その度に、 保存してあるパスワードとユーザーが入力したパスワードを総当りで検証するようになりますが、 [ Exitイベント ]との違いはどのようなものなのでしょうか。
 仮に[ Changeイベント ]を使ったとすると、1文字ずつ入力される度に、パスワードの判定や判定に移るための桁数カウントを行うコードが加わります。 [ Changeイベント ]では、コードの前半で[ LEN関数 ]を使い、入力値が指定文字数になるまで[ Exitステートメント ]でプロシージャを抜けさせる方法もあります。 しかし[ EdtPass00 ]が扱うのはパスワードなので、桁数さえも判明することは避けたい理由から[ Exitイベント ]を使っています。
 無事にパスワードを使ってログインできたときに、初めて[ メニュー画面 ]が表示されます。 その裏側では、ログインした年月日と時間、それとパスワードが記録された「ログファイル」が作成されています。
 仮に、このマクロを起動フォルダ[ XLStart ]に置いておけば、そのパソコンで[ Excel ]が起動するたびにログイン画面が表示され、 秘密裏に[ Excel ]の起動時間を記録できます。ワークシート上のキーボード操作ではありますが、[ OnEntryプロパティ ]でアクティブセルを特定し、 ユーザーのキーボード操作を記録することもできますが、悪用してはだめですよ。

番外2.

posted by くきお at 11:11| Comment(0) | ExcelVBAマクロ | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。