拙著「商売繁盛!アクセスで販売顧客管理」の最新版執筆に伴い、Access2000〜2003対応の販売顧客管理データベースを「Access2007+Vista」対応に移行する作業を行いました。その作業で行ったこと・気付いたことなどについてレポートします。
- 「.accdb」への変換と起動時の画面
まずはじめに行ったことは、Access2000形式の「.mdb」ファイルを、2007形式である「.accdb」に変換する作業です。
それには次のような操作を行います。
- Access2000形式の販売顧客管理データベースをAccess2007で開きます。
- Officeボタンより[変換]を選択します。
- 「名前を付けてダイアログ」が表示されたら、「ファイルの種類」が”Access2007データベース(.accdb)”であることを確認して[保存]ボタンをクリックします。
この作業はエラーなど出ることなく終わりました。
問題は、起動したときの状態です。これは従来の「.mdb」のときはかなり異なっています。
- Accessインストール後のデフォルト設定ではセキュリティが効いているので、VBAのコードを含むファイルはそのままでは実行されず、警告メッセージが出ます。その都度コンテンツを許可してVBAを有効にするか、セキュリティセンターで実行の許可を設定しなければなりません(詳細は後述)。
- 販売顧客管理データベースの旧版ではメインメニュー画面というものがなく、すべてカスタムメニューバーから各処理・画面を起動するようになっています。
Access2003等のオプション設定で「組み込みツールバー」が”非表示”に設定されている場合、2003形式のままそれをAccess2007で開くと、従来通り、オリジナルのメニューバーやツールバーが表示されるとともに、リボンも表示されません。
しかしそれを2007形式に変換すると、カスタムメニューバーおよびツールバーは、リボンの中の[アドイン]というタブの中に表示されます。accdbでは、リボンを非表示にすることも、従来の形式・外観でメニューバーを表示させることもできないようです。画面の起動用としてカスタマメニューバーがある場合、せめてデータベース起動直後のデフォルトタブが選択できて、[アドイン]タブを真っ先に表示できればまだよいのですが、それも無理なようです。
- Access2007では[アドイン]タブに表示されているメニューバーをカスタマイズすることすらできません。よって、これからカスタムメニューをアレンジしたいといった場合には、常にAccess2003等でメニューバーをカスタマイズしたあと、2007形式に変換するという作業が必要なのかもしれません。
- Access2007のセキュリティ
Access2007でもイベントプロシージャの作り方は今までとまったく同じです。でも、新規にデータベースを作った場合でも、コマンドボタンにクリック時イベントプロシージャを作ったあと、ボタンをクリックしても何も起こりません。どうやらセキュリティの設定の関係で、既定のフォルダ以外の場所に作ったデータベースファイルに関しては、自分で作ったデータベースでさえVBAは動作しないようです。
その対処方法としてはいくつかの方法があります。
- 毎回毎回データベースファイルを開いたときにセキュリティ警告のメッセージが表示されるので、そこで[オプション]をクリックして、”コンテンツを有効”にしてやる
- 「Accessのオプション」ダイアログから表示される[セキュリティ センター]画面において設定変更を行う。次のいずれかの設定を一度行えば、以降その対象コンテンツはセキュリティに掛からないようになります。
- ひとつの手段として「すべてのマクロを有効にする」を選択します。注意書きではこの設定は”推奨しません”と書いてありますが、自分で作ったデータベースを動かすだけなら問題ないはずです。
- もうひとつの手段は、データベースに対してデジタル署名をして、その発行元を「信頼できる発行元」に追加登録する方法です。
- もうひとつの手段は、データベースファイルがあるフォルダを「信頼できる場所」に追加登録する方法です。Windowsのログインユーザーのドキュメントフォルダでさえそこには初期登録されていませんので、よく使うフォルダや、開発用に使うフォルダを丸ごと登録しておけば警告メッセージは表示されなくなります。
- 最適化の圧縮率
旧版の.mdb形式のファイルサイズは約10MBありました。それを「.accdb」に変換しただけでファイルサイズは約7MB未満まで減りました。Access2007形式のデータベースファイルの方が、ファイルサイズは小さくなるようです。
一方、Access2007を使って、.mdbファイルをそのままの形式で最適化してみると、約5MBまでサイズが下がっています。このことから、Access2007自体の最適化の圧縮率が従来のバージョンよりも高い(ファイルサイズが小さくなる)ことが分かると思います。
- Accessの起動時の設定やオプション設定
Access2003までにあった「起動時の設定」は、Accessのオプション設定に包含されました。Officeボタンから表示される「Accessのオプション」ダイアログの「カレントデータベース」画面にてその設定を行います。
- Access2007のフォームに関するビュー
Access2007では、フォームに関するビューが「フォームビュー」、「デザインビュー」、「レイアウトビュー」の3種類になりました。レイアウトビューを使うと、実行状態と同じビューでありながらデザインを変更することができます(従来のようにプロパティシートからだけでなく、直接コントロールの位置などを変更できる)。しかし、リボン上の表示される[表示]ボタンでは、フォームビューとレイアウトビューがオルタネイトに切り替わるため、デザインビューに変更するにはさらにドロップダウンリストからの選択という操作が必要です。レイアウトビューに慣れればデザインビューの使用頻度は減るかもしれませんが、新規にコントロールを挿入できないなど、完全にフォームビューとデザインビューの機能を統合・踏襲しているわけではありません。
なお、従来通りフォームビューとデザインビューの2つを中心に使いたい人は、「Accessのオプション」ダイアログの「カレントデータベース」画面の設定において、[レイアウトビューを使用可能にする]オプションのチェックを外すことで対処できます。今回の販売顧客管理データベースの変換作業においては、変換後はデフォルトでチェックは外れていますが、そのままの設定で進めることにしました。
- VBEを開いてみる
フォームのデザイン中にVBEに画面を切り替えるには、以前と同様にAlt+F11キーが使えるし、プロパティシートの各イベントからも呼び出すことができます。ただツールバーがなくなりリボンとなったAccess2007の場合、[データベースツール]タブをクリックしてさらにそこからVBEのボタンをクリックする必要があります。これはVBAを多用する人にとっては不便に違いありません。
この場合、リボン上のボタンを右クリックして[クイックアクセスツールバーに追加]を実行、クイックアクセスツールバーにもそのボタンを配置しておくとよいでしょう。
なお、VBEも当然のことながら外観としてはVistaのウィンドウデザインの影響は受けていますが、操作性や機能については、この時点で感じた限りでは、メニューバーやツールバーをはじめとして、おそらくまったく変更はされていないように思います。
- VBEの設定変更
これはデータベース変換作業ということではなく、Access2007を新規導入したことによるものですが、自分の場合、毎度のことながら、以下のようなVBEのカスタマイズを行っています。
- [自動構文チェック]オプションは外す
- [変数の宣言を強制する]オプションを付ける
- [タブ間隔]を「2」に設定変更(ただし、エディタのフォントをVista標準のメイリオにすると文字幅が狭くなるので、その場合はデフォルトの「4」の方が見やすい)
- エディタの[フォントサイズ]を「12」に設定変更
- すべてのドッキングを解除
- ツールバーの「デバッグ」と「編集」にあるほとんどのボタンを「標準」のツールバーにも配置、単一のツールバーにふだん使うボタンをまとめる
- VBAの参照設定について
Access2007では、データベースエンジンの正式名称が「Microsoft Office 12.0 Access database engine」になりました。これは、新規作成したデータベースファイルのVBEの参照設定の画面で、デフォルトで「Microsoft Office 12.0 Access
database engine object Library」の項目にチェックが付いていることからも分かります。
今回の変換作業では、.mdbのときはDAOに参照設定のチェックが付いていたのですが、.accdbの変換によって自動的にそのチェックが外され、代わりに上記ライブラリにチェックが付きます。このことから、『DAO3.6の後継はMicrosoft
Office 12.0 Access database engine』であり、『DAOのプログラムは新しいそのライブラリでそのまま正常に動作することが保証されている』といってよいかもしれません。
Microsoft Office 12.0 Access database engineは、多少オブジェクトなどが追加されているものの、基本的には従来のJETデータベースを継承しているような情報を得ていますが、実際にDAOで使っていたコードを実行してみると、DAOのライブラリを参照していなくても、すべてのコードはうまく動きました。もちろん、変換した販売顧客管理のデータベースのプログラムでは、コンパイルエラーも発生しません。
ただ、不思議なことに、オブジェクトブラウザを見てみると、”Access database engine”のようなライブラリは表示されておらず、ライブラリ一覧には”DAO”と表示されています。どうやら実体はDAOであり2007はそのバージョンアップ版のような扱いになっているように思われます。互換性は相当高いということでしょうか。
|