2
2

【いい記事なのにリンク切れ】Access VBA を始めるに当たり、目を通しておくべきページ

Last updated at Posted at 2023-10-24

Access VBA を始めるに当たり、目を通しておくべきページ
https://accesskid.wordpress.com/2012/01/26/access-vba-%E3%82%92%E5%A7%8B%E3%82%81%E3%82%8B%E3%81%AB%E5%BD%93%E3%81%9F%E3%82%8A%E3%80%81%E7%9B%AE%E3%82%92%E9%80%9A%E3%81%97%E3%81%A6%E3%81%8A%E3%81%8F%E3%81%B9%E3%81%8D%E3%83%9A%E3%83%BC%E3%82%B8/

すべてリンクが切れている

一部はわからない。

  1. 文書番号: 283878 – 最終更新日: 2007年3月20日 – リビジョン: 6.2
  2. データベースの正規化の基礎
  3. 文書番号: 826763 – 最終更新日: 2007年6月14日 – リビジョン: 2.1
  4. Access データベースでの作業時に使用すべきでない特殊文字
  5. 文書番号: 286335 – 最終更新日: 2007年6月14日 – リビジョン: 12.2
  6. Access 2002 およびそれ以降のバージョンの Access の予約語の一覧
  7. 4.文書番号: 210276 – 最終更新日: 2007年5月21日 – リビジョン: 6.1
  8. Microsoft Access で日付/時刻型の値の格納、計算、および比較を行う方法
  9. 文書番号: 246335 – 最終更新日: 2007年6月14日 – リビジョン: 5.0
  10. オートメーションを使用して ADO レコードセットのデータを Excel に転送する方法
  11. MS Office Support:SQL リファレンス
  12. 文書番号: 834927 – 最終更新日: 2004年1月20日 – リビジョン: 1.1
  13. [ACC2003] MDB のレコードの並び順について
  14. MS Office Support:Access ワイルドカード文字リファレンス
  15. 文書番号: 281998 – 最終更新日: 2005年6月10日 – リビジョン: 4.2
  16. [ACC2003] Microsoft Access フォームを ADO レコードセットに連結する方法
  17. 文書番号: 285822 – 最終更新日: 2007年8月10日 – リビジョン: 7.1
  18. Access でデータベースにログオンしているユーザーを Microsoft Jet UserRoster で調べる方法
  19. 文書番号: 128881 – 最終更新日: 2004年1月23日 – リビジョン: 4.0
  20. [AC97] コンボ ボックスやリスト ボックスに”(その他)”を追加する方法
  21. 文書番号: 170918 – 最終更新日: 2004年3月31日 – リビジョン: 1.0
  22. [VB] 関連付けられたファイルを ShellExecute で起動する方法 (32 ビット)

代わりになる場所(現在一部不明)

  1. データベース正規化の説明 - Microsoft 365 Apps | Microsoft LearnLink.

  2. Access データベースで特殊文字を使用するとエラー メッセージが表示される Link.

  3. Access データベースでの作業時に使用すべきでない特殊文字からタイトルが変更されているが、おそらくこれ。
  4. Access 2002 以降のバージョンの Access の予約語の一覧Link.

  5. これはリンクが消えているがタイトルは同じなので大丈夫。ほかにも以下がある。

    Access の予約語の一覧 - Microsoft 365 Apps | Microsoft Learn Link.

    こういう風に情報が錯綜するのはよくある。
  6. Microsoft Access で日付/時刻型の値の格納、計算、および比較を行う方法Link.

  7. これもタイトルが同じで存在。

  8. オートメーションを使用して ADO Recordset から Excel にデータを転送する方法 - Office | Microsoft Lear Link.

  9. WebArchiveに元記事はあるようだ。自動化を使用して ADO レコードセットから Excel にデータを転送する方法

  10. Microsoft Access SQL リファレンス Link.

  11. :star::star:[ACC2003] MDB のレコードの並び順について :star::star:
  12.  これが現在見つかっていない。 [mofu犬blog: [MSAccess] テーブル レコードの並び順を変更する](http://mofuken.blogspot.com/2015/02/msaccess.html)
  13. ADO レコードセットにフォームを連結します Link

  14. タイトルがおかしくなっているが、おそらくこれ。
  15. Access で Microsoft Jet UserRoster を使用してデータベースにログオンしているユーザーを確認する方法 Link

  16. Access ワイルドカード文字リファレンス Link.

  17. コンボ ボックスまたはリスト ボックスに "(すべて)" を追加する Link.

  18.  以前の記事はその他なので、これかどうか。「すべて」と「その他」って全然違うよね。
    英語だが以下の2つ。
    「すべて」または「N/A」オプションをコンボ ボックスに追加する方法 – iAccessWorld.com
    列ヘッダーを含む AddAllToList - Microsoft Access / VBA

    この関数はもともと黎明期に作成されたもので、何年にもわたって多くの変更を加えてきましたが、ネットで検索しても列ヘッダーの使用を許可する関数がまだ見つからなかったので、その関数を投稿しようと思いました。

  19. 関連付けられたアプリケーションでファイルを開く(VB6.0) - VBレスキュー(花ちゃん) Link.

  20. 公式サイトは見つからないが、おそらくこれだと思う。VBと頭にあるのでWin32APIのはず。

    この過程でAccessで秒を時間で表示させる方法って? -こんばんわAccessで秒を時間- Access(アクセス) | 教えて!goo
    で紹介されている、
    http://support.microsoft.com/kb/881854/ja
    これも現在見つかっていない。タイトルすらわからない。
    特に7番はたくさんの紹介がされているが、なぜかアーカイブもなく、全くどこにあるかがわからない。
    しかし、せっかくまとめたサイトがあっても、ことごとくリンクが切れてしまい、リダイレクトもしない。

    この他

    まずAccessは何をするか

    Access 2010 の基本的な作業 - Microsoft サポート
    Access のキーボード ショートカット - Microsoft サポート

    トレーニングビデオ

    Access のビデオ トレーニング - Microsoft サポート

    Accessは仕様と新機能の理解が重要

    64 ビット版または 32 ビット版の Office を選択する - Microsoft サポート
    現在の推奨は64bitとなっているが、Accessを使うには64ビットより32ビットのほうが良い。
    DAOなどのJetエンジンが使用できることはBigIntより重要性が高い。

    Access データベースの構造について - Microsoft サポート
    Access の仕様 - Microsoft サポート
    データ型とフィールド プロパティの概要 - Microsoft サポート
    データベース内のオブジェクトのデザイン設定をカスタマイズする
    Access 2019 の新機能 - Microsoft サポート
    Access for Microsoft 365 の新機能

    Accessの基本で知られていないのがインデックス

    インデックスの作成と使用によりパフォーマンスを向上させる - Microsoft サポート

    最初はわからないが、基本パフォーマンスが落ちないような設計を目指すべき

    Access のパフォーマンスを向上させる - Microsoft サポート
    パフォーマンス最適化ツールを使用して Access データベースを最適化する - Microsoft サポート

    オブジェクト(テーブル、クエリなど)命名方法

  • 空白を入れないこと。
  • 特殊文字、予約語を使わないこと
  • 一意であること。つまりテーブル、クエリ、フォーム、レポートで、同じ名前を使うことはできない)
  • 各オブジェクトでは基本的に昇順に並ぶ。
  • 長い名前は見えないので、極力短くすること。

そこで、次のように命名方法を工夫する。これは定まったものはないが、名前がかぶらず、特にクエリやマクロアクションで異なるものが混じらないようにすること。

  • テーブルには"T_"から始める。"T_00Master"など
  • クエリはQ_から始めるが、アクションクエリなどを作る場合は"QA_","QD_"とする。選択クエリと削除クエリアクションクエリが混在しないようにしないと危険。
  • マクロアクションボタンは、フォームに並ぶ順を意識し"M01_"などとする。またツールや設定と分けるときは"MT" "MS"から初めて通常の操作と区別する。ここも混在はさせないこと。
  • フォーム、レポートは"F_"、"R_"から始める

テーブル

ワークシートと似ている。というかワークブック自体が一種のデータベースとは言える。
ただ、データの自由度がない
まずはテーブルを作り、リレーションシップを作る。
テーブル​​ - Microsoft サポート
テーブルの概要 - Microsoft サポート
テーブルを作成してフィールドを追加する - Microsoft サポート
Access でテーブルの主キーを追加または変更する - Microsoft サポート
テーブルおよびクエリを結合する

Accessの基本はSQLとそれをグラフィカルに示したクエリ

Access SQL: 基本的な概念、用語、および構文 - Microsoft サポート

式(普通は関数)

式 - Microsoft サポート
式の概要 - Microsoft サポート
アクセスではファンクション(関数)をエクスプレッション(式)という。
あとなんでも概要ってつけて検索すると出てきそう。

重要な関数

:bomb::bomb::bomb::bomb::bomb::bomb::bomb::bomb::bomb::bomb:
:bomb::bomb::bomb:Round 関数:bomb::bomb::bomb:
:bomb::bomb::bomb::bomb::bomb::bomb::bomb::bomb::bomb::bomb:
こいつは要注意。というかこの関数を使っていたらまずそのデータベースは信用ができない
なぜなら、これはExcelのRoundとは全く別物だから。

注: この VBA 関数は、銀行取引の丸めと呼ばれるものを返します。 そのため、この関数を使用する前に注意してください。 より予測可能な結果を得る場合は、Excel VBA のワークシート丸関数を使用します。
ちなみに、クエリの中ではこれは使えない。じゃあどうするかというと、関数電卓みたいにABS、Int。Signを使う。

IIf 関数 - Microsoft サポート
クエリでよく使う。なぜかIf関数ではなく、IIFという。

DLookup 関数 - Microsoft サポート
指定した条件でレコードをの指定したフィールドを参照する。VlookUpに近い。
DCount 関数 - Microsoft サポート
こちらは指定した条件でレコード数をカウントする。
Val 関数 - Microsoft サポート
Accessでは16進数の変換にこれを使う。ExcelのEvalに相当する関数。
Nz 関数 - Microsoft サポート

失敗するとよく出る

Access によりパラメーター値の入力が求められるのはなぜですか? - Microsoft サポート
簡単に言うと失敗している。

簡単な選択クエリを作成する - Microsoft サポート
Access クエリで抽出条件として日付を使用する例 - Microsoft サポート
集計行を使用してデータシートに列の合計を表示する - Microsoft サポート
これが一番簡単な集計方法。
クエリを使用してデータを集計する - Microsoft サポート
クエリの実行時にパラメーターを使って入力を求める - Microsoft サポート
こちらはエラーではなく、本当のパラメータークエリ。
だから動的クエリとかいちいちクエリを新しく作るよりもこちらが便利な場合がある。

文字列を操作するというのも重要

文字列関数とその使い方

忘れ去られがちなフォーム、レポート

フォームとレポート
フォームまたはレポートにフィールドを追加する - Microsoft サポート
これはタイトルが悪くて、フィールドリストのこと。

フォーム

Access でフォームを作成する - Microsoft サポート
OpenArgs プロパティ - Microsoft サポート
フォーム上のコマンドボタン配置基準について
この他、タブオーダーを順番にするのが重要。面倒だが、タブキーで飛ばすとめちゃくちゃになる。
また、ボタン名も工夫する必要がある。

レポート

単純なレポートを作成する - Microsoft サポート
Access におけるレポートの概要 - Microsoft サポート

アクションマクロ

Accessのマクロのアクションとは | できるネット
Access 2007 マクロの基本 - Microsoft サポート
このマクロはVBAではなく、アクションマクロ、またはアクションマクロのこと。
Access マクロ アクション (Access 開発者用リファレンス)
データ マクロを作成する - Microsoft サポート
このアクションマクロはフォームの操作のときによく使われる。
このアクションマクロの最大の欠点は、外部に容易にエクスポートできない点。
エクスポートしても

VBA

Office VBA の基礎知識
Accessに限らず、OfficeではVBAが使える。これはVisual Basicの簡易版として位置づけられている。
そして、マイクロソフトはVBAを売りにしていたが、セキュリティを言い訳にして現在はVBAが大嫌い。
しかし、Accessでは使用せざるを得ない時が多くある。
Access 開発者向けドキュメント
いわゆるマクロ。そして、DAO、ADO、ADOXの説明がついているというのがAccessの独特な点。
そして、AccessではVBAは必ず使う
これ、停止したら会社を辞めていいレベル。
ログ関数 (Visual Basic for Applications) | Microsoft Learn

VBAが使えないとこれが使えない。Logなんていつ使うの?というと、上位3桁で丸めるときに必須になるため。
また、Docmd.RunSQLは255文字が限界で、複雑なSQLを実行できない。
さらに、テーブルを作成するときに、ハイパーリンク型を設定することができない。
また、一時的にクエリを作成するときも必要。

Option Base ステートメント (VBA) | Microsoft Learn
配列のスタートを1から始めることができる。
Option Compare ステートメント (VBA) | Microsoft Learn
Textにすると、全角、半角の区別がなくなる。

データのインポート、エクスポート

Access でのデータのインポート、リンク、およびエクスポートの概要 - Microsoft サポート
差し込み印刷もできるが、レポートで印刷するよりExceに出力することが多い。
また、Excelをテーブルに変換することも多い。
あと、マイナーなのがOutlookのアドレス帳のインポート、エクスポートにいきなりアクセスが使われる。

日付と時刻

日付と時刻はアクセスは苦手。ジオロケーションも苦手。
日付と時刻のフィールドを書式設定する
100分の1秒のデータを扱いたい - hatena chips

情報追加

Googleでは出てこなかったので探したよ。

適切な日付関数を選択する - Microsoft サポートAccess2013
Format 関数 (カスタム web アプリケーションのアクセス) のユーザー設定の日付と時刻の書式を設定します。 | Microsoft Learn

適切な日付関数を選択する

最初は目を通さなくていいアドヴァンス編

この辺は最初は目を通さなくていいが、こういうのがあるんだということで

データベースの作成方法

データベースそのものの作成はあまりやらないと思うが、

  1. 正直に新規作成する
  2. Powerhell、VBSで作成する
  3. Excel等のVBAで作成する。
がある。 これは修復とかのときに使う。

テーブルの作成方法

現在知られている方法は、

  1. 正直に新規作成する。
  2. VBSで外側から外側から操作して作成する。
  3. リンクテーブルを作り、そのあとテーブルにする。
  4. Excelをインポートする。
  5. DoCmdを使う
  6. テキストファイルをインポートする。
  7. テーブル作成クエリを使う。もしくはそれをVBAで実行する。
  8. VBAでADOXを使う。

このようにいろいろあるが、フィールドのデータ型をハイパーリンク型にする方法は1.が一番単純で、ADOCで作ってハイパーリンク型にするの2つしかない。なぜなら、ハイパーリンク型は長いテキスト(メモ型)の派生として扱われているからだ。

Access特有のVBAほか

Microsoft Access 2003 言語リファレンス [Access 2003 VBA 言語リファレンス] | Microsoft Learn
全部英語、日本語はない。
Access 2010 | Microsoft Learn
Visual Basic for Applications (VBA) の言語リファレンス | Microsoft Learn
Accessに限らずOffice VBA全般の知識。

[DoCmd オブジェクト (Access)]https://learn.microsoft.com/ja-jp/office/vba/api/access.docmd)
これはマクロアクションをVBAでやっているようなやつ。
またはメニューバー(現在はリボン)やツールバーの命令を実行する。(一部旧バージョンのためのものがある)Excelのコマンドコントロールに相当する。

Access の各メニュー コマンドまたはツールバー コマンドには対応する定数があります。この値を指定して RunCommand メソッドを使うと、コードでコマンドを実行できます。
unCommand メソッドは、 DoCmd オブジェクトの DoMenuItem メソッドを置換します。

それまでのDoMenuItemを置換する形でAccess2000時代にはよく使われた。
なお、ヘルプで記述されている、acMeneVer70, acMenuVer20 acMenuVer1Xは一応VBEを起動し、F2から検索はできる。その際、非表示を表示するを起動させておくこと。

Access Study Vol.4 Docmd活用リファレンス | T'sWare
Docmd活用リファレンス 6 コマンドの実行(その3) | T'sWare
ただし、DoCmd.TransferTextなどは挙動が違うときある。
さらに、この中にAccessのとんでもないメソッドがある。
DoCmd.RunCommand メソッド (Access) | Microsoft Learn
これはacCommand定数を実行するが、500以上の命令があり、現在のバージョンでは実行できないものも存在する。これは、いわゆるツールバーのタブ(ファイルとか、ホームとか)の機能を実行するものらしい。しかし、例えばヘルプを開きます、終わり。ということで、次のアクションができない。また、MicrosoftがBingを推しているので、

Sub OpenTest()
DoCmd.RunCommand acCmdOpenSearchPage
End Sub

これを実行すると、既定のブラウザでBingが開く。しかし、以前はMicrosoft Searchページが開いていた。どう考えても必要性が全くないものが存在している。またこれらの定数の解説が存在しない。
一覧表はこういうのもあるが、やはりよくわからない。
DoCmd.RunCommand - Access VBA - Access FQA 自問自答のAccess tips!
以前はこのようなサイトもあり、発掘はしたが、現在は存在しない。
https://qiita.com/Q11Q/items/c1ec070cdf3b1de41c66
フォームの操作に使うものだけ抑えておけばよい。
アクセスの標準メニューをVBAで使うRunCommand

Office 製品のトラブルシューティング
このページは真っ先に見える。攻略ガイドには意味がない。
image.png
左側にある、Accessをクリックしてからが本番。
image.png

イベントに関して

Excelと違い、開くときと終了(データベースを閉じる)イベントがない。
https://stackoverflow.com/questions/12063404/is-there-an-on-close-event-for-ms-access-vba

DAO AOD ADOX

お行儀よくいくと、Access 開発者向けドキュメント | Microsoft Learn -
Microsoft Data Access Objects リファレンス | Microsoft Learn
これがDAO Accessのデータベース間、または単体でのデータのやり取りに使用する。
しかし、ここを見てもだいたいわからない。
ところで、VBAの概念というのは一般的にはTipsに属することが記述されている。
実はこの中にDAO、ADOの重要事項が存在する。そう、構成がめちゃくちゃなのである。
DAO レコードセットのレコード数をカウントする | Microsoft Learn

Microsoft ActiveX データ オブジェクト リファレンス | Microsoft Learn
Excelやテキストをデータベースにする、出力するとき使う。
この中でデータベースの枠を外れて使われるのがAODDB.Stream

ADO 接続文字列を作成する | Microsoft Learn
そしてADOのことがここに書いてある。なぜなら、ADO,DAOはVBAまたはVBSで使用するためである。

Scema.iniがなぜSQLに?

テキスト データ ソース ドライバーの初期化 | Microsoft Learn
Accessのschema.iniはここに記載されている。ところが一般にはSQLサーバーのほうがヒットする。そちらとは違うので注意。
これはADOとつながっている。接続文字列だけできてもこの設定ができないと使えない。特にUTF-8時代のテキストファイルはそう。

64bitの壁 Jet

【VBA】ADOを使用してテキストファイル(CSV)をDB操作する方法のまとめ
64bit版Windowsでの「Microsoft.Jet.OLEDB.4.0」について
VBAでのJetとAceのメモメモ
ODBC 管理者ツールは、32 ビットと 64 ビットの両方のユーザー DSN を 64 ビット バージョンの Windows で表示します。
なお、64bitOSで64BitAccessのときはダウンロードして、
%USERPROFILE%\Downloads\accessdatabaseengine_X64.exe /Quiet
で成功した。
Jet compact ユーティリティはダウンロード センターで利用できます

Microsoft.Jet.OLEDB.4.0でCSVに実数をSQLでInsertすると小数点以下2桁未満が切られる #.NET - Qiita
xls(*),csvとのやり取りはどうしてもデータ型の変換がうまくいかない時がある。
とこで、なぜテキストファイルのやり取りが必要になるのか?
これは違うデータベースや、将来Accessがなくなっても、データベース本体は移管できるようにするためである。

VBSのサンプル

WSHで64/32bitを区別する。起動する。: Windows Script Programming
Jet.OledbやJscripを使う時、どうしてもSyswow64のWScript.exeやCscript.exeを使用する。
この時、自動で切り替えるコードが必要となる。

Access形式データベースへの接続1 - VBScriptさんま屋
CX's Hello, World! » Access

WizHook

AccessでWizHook使ってみよう。 | すたじおこんぶ
Willkommen bei Team-Moeller.de - Wizhook-Objekt
WizHook - Isladogs on Access

お役立ちサイト

リンクをたどる必要はないが、これはある程度困り果てるときに検索するとヒットする。
魔法使いの開発工房
Access 97からAccess2007までのテクニック。
ちなみにこのサイトを作っていたきたみ氏は、できるネットで執筆している。

Access VBAテクニック カテゴリー:即効テクニック|Excel VBAを学ぶならmoug
Access Tips | T'sWare
記事一覧 - もう一度学ぶMS-Access
B.WH |ACCESS ボケ対策
超マニアックな裏技を集めているページ。
ConnectionStrings.com - Forgot that connection string? Get it here!

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2