みなさん,こんにちは。
シンノユウキ(shinno1993)です。
Excel VBAでは,ユーザーフォームなどを活用することでユーザーが便利に使用できる様々なを処理を行うことができます.今回はIDとパスワードを入力しないとブックが表示されない「ログイン機能」を実装したいと思います.
ではいきましょう!
完成形はこんな感じ!
はじめに完成形をお見せしたいと思います.ログイン機能の実装されたブックを開くと,以下のようにブックは表示されずにユーザーフォームだけが表示されます.
IDとパスワードが一致→ブックが表示される!
そして,予め設定しておいたIDとパスワードが一致した場合,以下のようにブックが表示されるという仕組みになっています.
IDとパスワードが不一致→表示されない!
もしIDとパスワードが一致しない場合,ブックは表示されません.
ユーザーフォームの☓ボタンで閉じようとすると,ブックまで同時に閉じられる仕組みになっています.
コードはこちら!
では早速,コードを紹介します.まずはユーザーフォームから.なお,今回紹介したユーザーフォームは,こちらからDLできますので,ぜひご利用ください.
ユーザーフォームは,login.frmファイルに格納されています.それをインポートすることで,オブジェクト名をつけなおしたりといった作業も不要になりますので,ぜひ活用してください.
ではコードはこちらです.
Option Explicit Enum eColIndex id = 1 pass = 2 End Enum Private Sub btnLogin_Click() 'IDとパスワードの取得 Dim id As String Dim pass As String id = txtId.Text pass = txtPass.Text 'IDを検索しパスワードと照合 Dim idRow As Long On Error GoTo failed idRow = WorksheetFunction.Match(id, wsData.Columns(eColIndex.id), 0) If pass = wsData.Cells(idRow, eColIndex.pass) Then MsgBox "ログインしました", vbInformation, "成功" Application.Visible = True Unload Me Else failed: MsgBox "ログインに失敗しました", vbCritical, "失敗" End If End Sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) If CloseMode = vbFormControlMenu Then Dim ret As Variant ret = MsgBox("フォームを閉じる場合、このブックも同時に閉じられます。よろしいですか?", vbOKCancel, "確認") If ret = vbOK Then Application.DisplayAlerts = False ThisWorkbook.Close Application.DisplayAlerts = True ElseIf ret = vbCancel Then Cancel = True End If End If End Sub
ワークシートにIDとパスワードのリストを入力しています.そのワークシートのオブジェクト名をwsData に変更しています.1列目がID,2列目がパスワードです.
なお,以下のコードをThisWorkbookのonOpenのコードとして貼り付けると,前述のようにブックを開いた際にフォームのみを開くことができます.
Private Sub Workbook_Open() Application.ScreenUpdating = False Application.Visible = False loginForm.Show End Sub
注意点
IDとパスワードの管理が面倒
もし本Excelファイルを複数の人にコピーして配布する場合,新規にIDを追加したりする場合はそれぞれのファイルに追記しなければなりません.ですので,かなり面倒な作業になってしまいます.
第三者に見られる可能性もある!
IDとパスワードが一致しないとブックが開けないため,一見するとIDとパスワードをしらない第三者には覗かれないと思われがちですが,いくつか抜け道があり,完全にロックすることはできません.ですので,ゆるーくログイン機能を実装したい場合はこちらで問題ありませんが,そうでない場合は使用をオススメしません.
まとめ
今回はExcelVBAでログイン機能を実装する方法を紹介しました.使い所は限られそうですが,少し変更して使うともしかしたら良い働きをしてくれるかもしれませんね.