AccessのInputBoxのIMEをOFFにするオプション画面を作ってみた。開発13日目。

Accessで美容院向けCRMを作っているのですが、ママ友のお仕事関係で鍼灸院さんでベータテストしてもらえることになりました。お渡ししたのはVer0.1。ちょうどコロナウイルス騒ぎでお客様も迎えられない時期なので、お客様カルテとして使っていただけているようです。

また、カテゴリや従業員マスタの管理もできないといけないので、専用画面を作り、誤って操作してデータベースを壊してしまわないようにしないといけません。ということで、簡単なパスワードでマスター管理画面を開けるようにしました。

マスタ編集というタブを付けました。ここをクリックすると、管理者パスワードを求めるようにしました。「0000」を入力すると、グレーアウトしているボタンが利用できるようになります。

ボタンのグレーアウトと解除

タブのクリックというアクションでサブフォーム上のボタンを制御するのが意外と難しかったので自分へのメモ。長い・・・

 Forms!ナビゲーションフォーム!NavigationSubform!btn_担当者.Enabled = False

じつは、このタブの部分を押して表示されるInputBoxでは日本語入力になってしまうので、それを切りたかったんだけれどわからず。IMEの制御を指定したテキストボックスを作り、そこにフォーカスを当ててからInputBoxを呼び出すと、IME制御がつられることがわかりました。ただし、そのテキストボックスにフォーカスを当てる前に、サブフォームにフォーカスを当てるのがコツ。

Private Sub tag_マスタ編集_Click()
    Dim pass As String

        Forms!ナビゲーションフォーム!NavigationSubform!btn_EditCustomer.Enabled = False
        Forms!ナビゲーションフォーム!NavigationSubform!btn_カテゴリ.Enabled = False

        Forms!ナビゲーションフォーム!NavigationSubform.SetFocus
        Forms!ナビゲーションフォーム!NavigationSubform!txt_ime.Visible = True
        Forms!ナビゲーションフォーム!NavigationSubform!txt_ime.SetFocus 'IMEOFF対策
     
    pass = InputBox("管理者パスワードを入力してください。")
    
    If pass = "0000" Then
        Forms!ナビゲーションフォーム!NavigationSubform!btn_EditCustomer.Enabled = True
        Forms!ナビゲーションフォーム!NavigationSubform!btn_カテゴリ.Enabled = True

    End If
End Sub

機能追加はオプションで切り替え

ベータテストをしていただいて、さっそく機能追加のリクエストをいただきました。

  • 売上メモについて、ビフォー、アフター、ネクストプランの枠で作ってほしい
  • 誕生月だけでなく、誕生日も管理できるようにしてほしい

機能は盛り込んでいきたいのですが、シンプルで使いやすいこととも両立させたいので、昨日追加はオプション設定画面で使うか使わないかを切り替えられるようにしようと思います。

使いたい機能にチェックをいれるとフォームの一部がかわるという仕組み。でも機能追加ではデータベースにフィールドを加えないといけないケースが出てきます。今回の要望はまさにそのケース。でも、すでに追加してるお客様のデータを消してDBを差し替えていただくわけにもいかないので、DB更新のボタンを付けました。アップデートの時にはこれを押して、DBに列を追加しようというわけ。SQLのALTER命令を使います。ただいまテスト中。多分以下のようなので行けるはず。

Private Sub コマンド64_Click()
 Dim connString: connString = ""
    connString = connString & "Driver={Microsoft Access Driver (*.mdb, *.accdb)};"
    connString = connString & "DBQ=C:\ビューティーCRM\データベース\お客様データ.accdb;ReadOnly=False;"

    Dim cnn: Set cnn = CreateObject("ADODB.Connection")
    Call cnn.Open(connString)
    cnn.Execute "ALTER Table MST_お客様 ADD 誕生日 Integer;"
End Sub

ご意見・ご要望フォーム

マスタ編集画面に、Googleフォームでつくったアンケートのようなものが開くようにリンクを付けました。

カテゴリー編集画面

データベースになじみのない人には難しいかもしれないので、なるべくわかりやすく、カテゴリとアイテムを横に並べて表示させるようにしました。

担当者マスタ編集画面

担当者マスタはシンプルです。将来的にはパスワードや権限を加えて、店内メール機能みたいなのを加えようと思っています。

お客様一覧編集画面

この画面はあまり自由に触ってしまえるとDBを壊しかねないので、昨日として残すかどうか迷いどころ。お客様単位でなくてリストの状態で編集できるのは、楽かもしれないんだけれど、どうしようかな。

人に使ってもらうものを作るのって難しい。

これまでは、自分の中のイメージだけで作ってきたのだけれど、いざ人に使ってもらうとなると、いろいろ考えないといけないことが多いことに気が付かされます。例えば、データベースは一度入力をし始めてしまうと簡単にコラムを加えることもできません。初期データをいれるのに、CSVの取り込みなどもできたほうがよかったでしょう。このあたりは自分でやるならば直接テーブルへ流し込めばよいのですが、すでに誰かのPCに入ってしまっているものをたやすくいじるわけにもいきません。

機能追加も同様で、今後の拡張性やほかの機能との整合性も保ちながら作るって難しいところですね。