VBA(Access)

困ったら ↓ のURLからMSDNに飛び込もう!!






新規でExcelを作成

オブジェクトの作成、解放は以下のような感じ
Dim xls As Object
Set xls = CreateObject("Excel.Sheet")

xls.SaveAs "てすと.xls"
xls.Application.Quit

Set xls = Nothing

エクセルのオブジェクト、メソッド、プロパティについては
VBA(Excel) を参照の事。



データの管理について

DAOを使っている場合での話だが、複数人でデータベースを使用する場合、
フォームやVBAの更新などを行った際に、データの整合性を保つのが結構面倒である。
…というのも、mdbファイルがテーブル・クエリ・フォーム・レポート・マクロとセットに
なってしまっていることに起因する。

例えばフォームを更新した場合、他の人がテーブルを更新していた時などはテーブルの
インポートを行う必要が出てくる。この作業はかなり面倒かつ整合性が取りづらいものであり、
インポートの際には自分のテーブルを消さないと勝手にインデックスがふられるし、
リレーションも考慮してまとめてインポートしなくてはならないなど厄介極まりない。

なので、いい方法としてはテーブルだけを持っているデータベースと、それ以外のデータベースに分け、
テーブルをリンクする方法が考えられる。こうすることでテーブルは複数のデータベースで共有されるし、
フォームなどの更新もそのままそのmdbファイルを更新するだけでよくなる。

※リンクテーブルをVBAでオープンする場合、基本的には dbOpenTable で開くことはできない。もし開く場合は OpenDatabase でリンクテーブルが含まれるデータベースをフルパス指定して開き、そこからテーブルを取得する必要がある



RecordCountプロパティ

RecordCountプロパティはレコードの総数を知るために使うことができるが、
注意しなければならないのは、返す値はあくまでもアクセスされたレコード数という事である。
なので、レコードの総数を取得するには、まず MoveFirst -> MoveNext -> EOFまでループ という
ような形で、全てのデータにアクセスする必要がある。
テーブルにレコードが含まれていない場合はプロパティの値は 0 に設定されるので、判定基準に
使っても大丈夫。
レコードがない状態でMoveNextとかやるとエラーが出るので、レコードの取り扱いは常に
EOF, BOFをチェックするのがいいと思われる。



.ldbファイル

.mdbファイルと同じ場所に突如として存在する .ldbファイル。
これはロック情報ファイルで、同時アクセスをする際などの情報が含まれているもので、
データの保守などに使われているっぽい。
データベースを開くと勝手に生成され、閉じると自動的に削除されるもののようだ。

なので、データベースを移動するとか人に渡すとかするときに .ldbファイルを渡す必要は
ないということだ。



リンクファイルのパフォーマンス

リンクテーブルに対するアクセスが重い場合、それを改善するための手段がある。
(とは言っても改善されないこともあるような…)

手段としては、

  1. バックエンドデータベース(テーブルとそれ以外でデータベースを分割したうちのテーブルのほう)のテーブルをデザインビューで開く
  2. 表示メニューのプロパティからサブデータシート名プロパティ「なし」にする。

これで改善されるらしい。

VBA側での切り替えもできるらしいが、詳しくはこちら↓
http://support.microsoft.com/kb/261000/JA/
最終更新:2008年10月20日 18:45
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。