Accessの小技集
Accessファイルの最適化を行う(Access2007形式)
【書式1】
  MSACCESS.EXE AccCompact.accdb ;Accessファイル [/ウィンドウハンドル]
   Accessファイル  :(必須)フルパスでAccessファイルを指定する
   /ウィンドウハンドル:(省略可)現在開かれているAccessファイルのウィンドウハンドルを指定する

【書式2】
  MSACCESS.EXE AccCompact.accdb ;テキストファイル
    テキストファイル:(必須)フルパスでテキストファイルを指定する
      テキストファイルにはフルパスで最適化対象のAccessファイルを指定する
       例>C:\test1.mdb
          D:\test\test2.accdb
【注意事項】
  1.Access2007以上がインストールされていること
  2.最適化対象はAccess2003形式(mdb)のAccess2003形式(accdb)両形式(自動判定)
  3.Access2010以上の64bitにも対応
SourceCode
  download.gif (151 バイト)AccCompact.accdbのダウンロード (AccCompact.zip   13/01/20)

以下の小技はAccess2003形式ですが、Access2007形式に変換して使用できます
HyperlinkSubAddressに#を設定して手形のポインタを表示する

通常HyperlinkSubAddressにフォーム名を書くことでイベントを書くことなく、フォームを開くという使い方をしますが、
イベントはクリックイベントに書いて、手形のポインタを表示したい場合に有用です。HyperlinkSubAddressを指定できるコントロールは次の3つです。
コマンド ボタン、イメージ コントロール、ラベル コントロール

【制限事項】
 Captionに#を含むとエラーが発生します。
 Access2000では手形のポインタの下に#マークが表示されます。

  download.gif (151 バイト)HandPointer.mdbのダウンロード (HandPointer.lzh   03/06/02)
デスクトップとスタートメニューのプログラムにショートカットを作成

Windows Scripting Host(wshom.ocx)を使ってデスクトップとスタートメニューのプログラムに、依頼ファイルのショートカットを作成します。
ショートカットファイル(拡張子が.lnkまたは.url)の情報取得はこちら
.urlに対応しました(03/04/09)

SourceCode
  download.gif (151 バイト)MakeShortcut.mdbのダウンロード (MakeShortcut.lzh   03/04/07,03/04/09)
Accessのメニューバーとコマンドバーを消す

小技とはいえませんが、読者の方から質問があったので掲載します。

  

CommandBarsを特定する場合はNameプロパティに指定された文字列を使います。
NameLocalプロパティに指定された文字列を使うと失敗します。
例) CommandBars("Menu Bar").Enabled = True 成功
   CommandBars("メニューバー").Enabled = True 失敗

*NameLocalプロパティはAccess2000にはありますが、Access97のヘルプには載っていないようです。

SourceCode
  download.gif (151 バイト)LsCmdBars.mdbのダウンロード (lscmdbars.lzh   01/09/03)

(UPD 01/06/23)

Accessのフォームでアンコウを飼う
Accessフォーム上をアンコウが泳ぎ(?)ます。ランダムにのびちじみもします。

  

SourceCode
  download.gif (151 バイト)LsAni.mdbのダウンロード (lsani.lzh   01/06/23)

(UPD 01/06/23)

Access起動時のタイトル画像を表示しない
Access起動時に表示される次のようなタイトル画像
を表示しなく(?)するには、起動MDB(MDE)と同名の小さなBMPファイルを同一フォルダに作成します。
例)Test.mdb → Test.bmp
BMPファイルはWindows標準のペイントで簡単に作れます。
もっとも最近のマシンは速いので表示が気になりませんが・・・

(UPD 01/05/12)

Accessのメニューバーを消す
フォームのプロパティボックスで、"MenuBar/メニューバー" プロパティに =-1 と書けばメニューバーが表示されなくなります。
空のコマンドバーは残りますので、コマンドバーも消したい場合はApplication.GetOptionを使用しますが、この手軽さは捨てがたいものがあります。
"Toolbar/ツールバー" プロパティに =-1 を入力してもエラーになるだけです。

(UPD 01/05/12)

ファイル操作(SHFileOperation)のラッパー
標準モジュールにWin32APIのSHFileOperationを使った次の関数を作成していますのでご利用ください。エラーが発生した場合はエクスプローラのファイル操作で表示されるダイアログが表示されます。
拡張仕様としてオプションフラグを追加していますが、引数はVBAまたはVBの関数と同様です。
わかりやすくするためにあえて行っていませんが、APIコールの部分は共通の関数にしたほうがいいでしょう。
LsFileCopy(ファイルまたはフォルダをコピー)
FileCopy ステートメントの拡張版でサブフォルダごとコピーできます。
コピー先にフォルダがなければ作ってくれます。
エクスプローラでコピー時に表示される次のようなダイアログも表示れます。
LsKill(ファイルまたはフォルダを削除)
Kill ステートメントの拡張版でゴミ箱へ移すこともできます。
LsName(ファイルまたはフォルダの名前変更)
Name ステートメント相当。
LsMove(ファイルまたはフォルダを移動)
サブフォルダごと移動できます。
移動先にフォルダがなければ作ってくれます。
ドライブ間の移動はできません。
SourceCode
  download.gif (151 バイト)LsFileOpe.mdbのダウンロード (LsFileOpe.lzh   01/03/17)

(UPD 01/03/17)


項目の表示サイズを調整できるリストボックス
項目の表示サイズを調整できるリストボックスです。
項目名クリックでソートするため、スライダー用ラベルを作っています。
SourceCode
  download.gif (151 バイト)LsListBox.mdbのダウンロード (LsListBox.lzh   01/02/17)

(UPD 01/02/17)


ユニオンクエリーを使ってコンボボックスのリストに (なし) を簡単に追加
テーブルにデータを追加することなく、ユニオンクエリーを使ってコンボボックスに (なし) を追加します。Solutions.mdbには"RowSourceType/値集合タイプ" プロパティにユーザー定義関数を設定する方法が紹介されていますが、たかだか (なし) や (すべて) を出すのにかなりのコーディングをしなければなりません。
ユニオンクエリーのSQL

SELECT id, title
FROM title
UNION SELECT 0,"(なし)"
FROM title

ORDER BY title;
(なし)の括弧はソート順で最初にするためにつけてあります。
(なし)を選択したあと(なし)は表示されず、値もNullになります。
→(なし)を表示し値がゼロになるよう修正しました(01/08/04)
   UNION SELECT "","(なし)"UNION SELECT 0,"(なし)"としました
(なし)サンプルmdbではユニオンクエリーを作成しコンボボックスの"RowSource/値集ソース"に指定していますが、"RowSource/値集ソース"に直接SQLを書いてもかまいません。
  download.gif (151 バイト)(non).mdbのダウンロード ((non).lzh   01/08/04)

(UPD 01/08/04)


DLookupを使って同一データの有無をチェック 
同一のデータは入力できません。値を変更したが戻した場合はチェックしません。
Screen.ActiveControlと Screen.ActiveControl.OldValueを比較して、「値を変更したが戻した」のチェックを行ないます。
SourceCode
  download.gif (151 バイト)LsDataCheck.mdbのダウンロード (LsDataCheck.lzh   00/12/27)

(UPD 00/12/27)


マウスをポイントすると浮き出るコマンドボタン 
最近はやりの浮き出るコマンドボタンを作成します。
1.テキストボックスとコマンドボタンを作成しCaptionを同じにし重ねます。
Captionを同じ位置にするために、コマンドボタンを0.4mmくらい長くします。
テキストボックスは最背面にします。
コマンドボタンはTransparent(透明)プロパティをTrueに設定します。
2.コマンドボタンのMouseMoveイベントに浮き出させる処理を書きます。
Transparent(透明)プロパティをFalseに設定します。
コマンドボタンがくっついている場合は前のボタンを透明にする処理を書きます。
3.Formの詳細のMouseMoveイベントにコマンドボタンを透明にする処理を書きます。
4.コマンドボタンにFocusがあたったら、Dummyの透明ボタンにFocusを移します。
Focusがあたったままだと見栄えが悪いです。
問題点(^_^;)
速くマウスを動かした場合MouseMoveイベントが無視される場合があります。
タブキー、矢印キーでコマンド間を移動できません。
SourceCode
  download.gif (151 バイト)LsCmdBtn.mdbのダウンロード (LsCmdBtn.lzh   00/12/14)

(UPD 00/12/14)

  AccessのFormを固定する   
APIを使ってAccessのフォームを動かせなくします。VBでも使用できます。

次のAPIを使用しています。
GetSystemMenu
RemoveMenu

SourceCode

  download.gif (151 バイト)DontMove.mdbのダウンロード (dontmove.lzh   00/09/23)

(UPD 00/09/23)

 Access本体を最大化する 
ウィンドウハンドルを取得するお勉強です。
APIを使ってAccess本体を最大化、最小化・標準サイズにする方法です。またメモ帳(Notepad.exe)を最大化、最小化・標準サイズにする方法も書いています。おまけとしてデスクトップ上のアイコンをすべて消したり表示したりというお遊びもついています。

次のAPIを使用しています。
ShowWindow
FindWindow

SourceCode

  download.gif (151 バイト)LsShowWindow.mdbのダウンロード (lsshowwindow.lzh  24Kb 00/07/26)

(UPD 00/07/26)

 Accessで行(Record)を挿入するAccessで行(Record)を挿入する 
Accessで新規レコードを追加すると最後の行に追加されてしまいます。見た目だけでも途中に追加されたようにできないかという、邪道の小技です。ある行をコピーして貼り付けた場合に、その行がコピー元の行のすぐ上に複製されたように見えるサンプルです。

  1.レコードセレクターをダブルクリックしたら行をコピー
  2.複製ボタンをクリックしたら、コピー元の行のすぐ上に行を複製
  -----------------------------------------------------
ここから見えません
  3.新規レコードを追加(最後にレコードが追加されます)
  4.クリップボードから新規レコードに行を貼り付け
  5.ソートキーを組み立て(若干の問題を残してます)
  6.Requeryで並べ替えて
  -----------------------------------------------------ここから見えます
  7.更新結果を表示

三種類の「更新状態の表示/非表示」方法を紹介しています。
  1.Application.Echoプロパティ
  2.Paintingプロパティ
  3.LockWindowUpdate(Win32API)

SourceCode

  download.gif (151 バイト)LsInsertRow.mdbのダウンロード (lsinsertrow.lzh  29Kb 00/06/16)

Access97/2000共存環境の問題点

 方向キーを押しつづけるなどしてカーソル移動を行なうと途中でフリーズします。しばらくすると回復しますがカーソル移動を再開すると再発します。Basicのガベッジコレクション状態です。
単一の環境では発生しません。

(UPD 00/06/16)

 ShortPath、LongPath(Win95/98)に対応したパス名とファイル名の分割 
渡されたフルパスをパス名とファイル名に分割します。このときShortPath、LongPathの指定ができます。ShortPathはAPIで簡単に取り出せますが、LongPathを取り出すAPIのGetLongPathNameはWin95では使えません。そこでDir関数の隠された力を使います。次のWin32APIを使っています。

t1.gif (198 バイト)ShortPath名を取得
    GetShortPathName
t1.gif (198 バイト)LongPath名を取得。GetLongPathNameはWin95では使えません。
    GetLongPathName
t1.gif (198 バイト)OSのバージョンを取得
    GetVersionEx
t1.gif (198 バイト)「ファイルを開く」コモンダイアログを呼び出す
    GetOpenFileName

エクスプローラのファイルをクリックし「ファイル関連付け」でMDBを立ち上げるとCurrentDb.NameはShortPathになります。Accessの「開く」から開くとLongPathになります。どうしてもLongPath名が必要な場合に役立ちます。

SourceCode

  download.gif (151 バイト)LsGetPath.mdbのダウンロード (lsgetpath.lzh  01/12/01)
   Network Driveに対応(01/12/01)

(UPD 00/03/25,01/12/01

Accessでスクリーンキャプチャーを
AccessでAPIを使ってスクリーンキャプチャーを行い、MDBに格納します。「スクリーン全体」のスクリーンキャプチャーと「アクティブフォーム」だけのスクリーンキャプチャーができます。このAPIはVBからも使えます。

MdbCompactを使って自動的に最適化を行なっています。

SourceCode

  download.gif (151 バイト)LsScreenCapture.mdbのダウンロード (lsscreensapture.lzh  262Kb 2000/01/29)

(UPD 2000/01/29)

ポイント・インチ・cm・Pixel・twipの関係
ポイント・インチ・cm・Pixel・twipの関係は
1ポイント=1/72インチ=20twip
1インチ=1440twip
1cm=567twip
1Pixel=15twip

(UPD 2000/02/05)

Accessでハイパーリンクの挿入ダイアログを表示
AccessからAPIを使わずに、簡単にハイパーリンクの挿入ダイアログを表示出来ます。メニューバーの「挿入(I)」→「ハイパ−リンク(I)」と等価です。
記述するのは次の1行です。当然ですがハイパーリンクを挿入するためにはフォームをacDesignで開かなければなりません。
      DoCmd.RunCommand acCmdInsertHyperlink

       

先日 Holger Nick さんからEmailをもらい質問されたので作成したのですが、このダイアログは、どんな場合に使うのかよくわかりません。メニューにあることさえ知りませんでした。
SourceCode

  download.gif (151 バイト)acCmdInsertHyperlink.mdbのダウンロード (ac_cmd_insert_hyperlink.lzh  14Kb 2000/01/29)

(UPD 2000/01/29)

Accessで「印刷」ダイアログを表示
AccessからAPIを使わずに、簡単に印刷ダイアログを表示出来ます。記述するのは次の1行です。もちろんmdeでも大丈夫、RunCommandを見直しましょう。
      DoCmd.RunCommand acCmdPrint

       

当然のことですがプロパティをクリックすれば「プリンタのプロパティ」ダイアログを表示出来ます。
    

  download.gif (151 バイト)printdlg.mdbのダウンロード (printdlg.lzh  11Kb 2000/01/22)


(UPD 2000/01/22)

Access97のオブジェクトとPropertyの相関表
Access97のオブジェクトとPropertyの相関をMDBにしました。
1)PropertyはイベントProperty(AfterUpdateなど)を含んでいます。
2)すべてのオブジェクとPropertyを網羅しているわけではありません。Field、Required/値要求などが入っていません。

 LsAcPropertyフォームでは初心者向きの処理を行なっています。
1)コマンドボタンのダブルクリックで、同一処理が2回行なわれるのを防ぎます。
2)コマンドボタンに見せかけたラベルの上下の色を入れ替え、凹凸の動作をさせています。
3)コマンドボタンのクリックで長い処理を途中でCancelします。

    download.gif (151 バイト)ac97property.mdbのダウンロード (ac97property.lzh  32Kb 1999/11/20)

(UPD:1999/11/20)

WSHでショートカットファイルの情報を取得
 Windows Scripting Host(wshom.ocx)を使って、ショートカットファイル(拡張子が.lnkまたは.url)の情報を取得します。APIでは大変な作業がいとも簡単にできてしまいます。wshom.ocxは Microsoft Internet Explorer 4.0 以上 をインストールするとインストールされます。また IE 4.0 以上がないと動きません。
    ◆取得できる情報(オブジェクトブラウザーで調べればほかにも情報が取れます)
      exeファイル名(Description)
        ショートカットファイルのFull Pathファイル名(FullName)
        アイコンファイル名,Location(1から開始) の順に表示(IconLocation)
        ホットキー(Hotkey)
        Full Pathのファイル名(TargetPath)
        実行時のウインドーの大きさ(WindowStyle)
        作業フォルダ(WorkingDirectory)

   SourceCode(VB、VBAで使う場合はこちらを保存して下さい)

    download.gif (151 バイト)LsGetLnkFileInfo.mdbのダウンロード (lnkfinfo.lzh  32Kb 1999/10/02)
        別途Access本体が必要です

(UPD:1999/10/02)

Accessのメニューバー、ステータスバーの表示・非表示を切り替える
Accessのメニューバー、ステータスバーの表示・非表示を切り替えますAccess2000で名前の扱いが変更になりましたので注意が必要です。
    Access97では次の構文が許されましたが、Access2000ではランタイムエラー(2091:不正な名前です)になります。
        Application.GetOption("ツールバーの表示")=true
        Application.GetOption("ステータス バーの表示") = True
    ちなみにAccess97/2000とも次の名前はランタイムエラー(2091:不正な名前です)になります。
        "Show Tool Bar" "Show ToolBar" "Show Tools Bar" "Show ToolsBar"

    SourceCode

   download.gif (151 バイト)menu_barのダウンロード (menu_bar.lzh  27Kb 1999/08/28)
        別途Access97本体が必要です

(UPD:1999/08/28)

フォーム、レポート、テーブルなどが開かれている場合 True を返す
Northwind.mdbのユーティリティ関数IsLoadedの拡張版です。テーブル、クエリー、フォーム、レポート、マクロ、モジュールが開かれている場合 True を返します。

    SourceCode

    download.gif (151 バイト)LsIsLoadedのダウンロード (lsisloaded.lzh  52Kb 1999/07/24)
        別途Access97本体が必要です

(UPD:1999/07/24)

Open時にリンク状態を確認し、正常に接続する
Open時にテーブルのリンク状態を確認し、正常な接続でなければつなぎ直します。フォルダを移動した場合の自動処理が可能になります。データMDBがプログラムMDBのフォルダにあることを前提にしています。 LongPathNameに対応しました(00/03/25)

    SourceCode

    download.gif (151 バイト)LsConnectのダウンロード (lsconnect.lzh  47Kb 01/12/01)
        別途Access97本体が必要です
   Network Driveに対応(01/12/01)

(UPD:1999/06/26,00/03/25,01/12/01)

帳票型のフォームで、 項目ラベルをクリックしてべ替え
帳票型のフォームで、 項目ラベルをクリックして昇順/降順に並び替えを簡単に行ないます。並び替え処理をサブモジュール化することで、ラベルClick時のイベント記述が単純化されます。

    SourceCode

    download.gif (151 バイト)LsSortのダウンロード (lssort.lzh  57Kb 1999/06/12)
        別途Access97本体が必要です

(UPD:1999/06/19)

帳票型のフォームで、 方向キーによるTab制御をする。
帳票型のフォームで、 ↓↑キーを使ってレコード間を移動します。

    使用方法
        1)Formの "KeyPreview/キーボードイベント取得" プロパティ を Yes(はい)にします。
        2)Formの KeyDown/キークリック時 イベントに [イベント プロシージャ]を追加し次のコードを貼り付けます。
             LsTabCtrl KeyCode, Shift
      3)コンボボックスの方向キーにも対応しています。
            ComboBoxで Altキーを押しながら↓を押すとDropdownします。
            Dropdown状態で Shiftキーを押しながら↓↑を押すとリスト内を移動できます。

    SourceCode

    download.gif (151 バイト)LsTabCtrlのダウンロード (lstabctrl.lzh  67Kb 1999/06/12)
        別途Access97本体が必要です

(UPD:1999/06/12)