#7 オブジェクト操作系

ここで使われるメソッド/アクション
  • SelectObject/オブジェクトの選択
  • CopyObject/オブジェクトのコピー
  • Rename/名前の変更
  • Save/オブジェクトの保存
  • DeleteObject/オブジェクトの削除
  • RepaintObject/オブジェクトの再描画
  • SendObject/オブジェクトの送信

オブジェクトを選択する

'すでに開いているフォーム"支払伝票"をアクティブにします
DoCmd.SelectObject acForm, "支払伝票"

※指定したフォームが開いていないとエラーとなります。


'レポート"rpt社員マスタ"をプレビュー表示してアクティブにします
DoCmd.OpenReport "rpt社員マスタ", acViewPreview
DoCmd.SelectObject acReport, "rpt社員マスタ"

※通常は、レポートを開くことによってそのプレビューウィンドウがアクティブになります。しかし、レポートに出力するデータの期間など(Where条件)をダイアログで指定してからプレビューするような場合、レポートを開いたあとにそのダイアログを閉じると、必ずしもプレビューウィンドウがアクティブになりません。すでに他のフォームが開かれているような場合です。そのような状況で、上記の2行をセットで実行するとよいでしょう。


'データベースウィンドウ上のテーブル"支払区分"を選択します
DoCmd.SelectObject acTable, "支払区分", True

※この場合、テーブルが開かれるわけではありません。データベースウィンドウのテーブルタブから"支払区分"をクリックして反転表示させたのと同じ動作をするだけです。

オブジェクトをコピーする

'既存のテーブル"社員マスタ"を"社員マスタのバックアップ"という名前でコピーします
DoCmd.CopyObject , "社員マスタのバックアップ", acTable, "社員マスタ"

※「DoCmd.CopyObject」のすぐ次に、","が1つ付いていることに注意してください。
※データベースアプリケーションの実行時には、フォームやレポートのコピーを作ることはまずないと思います。しかし、テーブルについては、「何からの更新処理を開始する前に、テーブル全体を一時的にバックアップしておく」といった目的のために、このメソッドを使うことができると思います。


'c:\tmp\TestData.mdbにあるテーブル"社員マスタ"をコピーします
DoCmd.CopyObject "c:\tmp\TestData.mdb", "社員マスタのコピー", acTable, "社員マスタ"

※この場合、あくまでも「TestData.mdb」の中に、"社員マスタのコピー"というテーブルが作成されます。

オブジェクトの名前を変更する

'テーブル"社員マスタ"を"社員マスタ1999年"という名前に変更します
DoCmd.Rename "社員マスタ1999年", acTable, "社員マスタ"

※テーブル名の変更は、現在ある社員マスタのテーブル全体は1999年の過去のものとして保存しておき、2000年分として運用するデータはあらためて作り直す、あるいはどこからかインポートしてくる、といったデータ管理を行うような場合に使うことができると思います。フォームやレポートについては、アプリケーションの動作としてオブジェクト名を変更するということはまずないでしょう。

オブジェクトを保存する

'"frm社員マスタ"を上書き保存します
DoCmd.Save acForm, "frm社員マスタ"

と、オンラインヘルプの「使用例」にならって書いてはみたものの、実行するとエラーになってしまいます。フォームのデザインを変更してフォームを閉じようとすると「変更を保存しますか?」というメッセージが出ますが、フォームの読み込み解除時イベントなどでこのメソッドを実行してみても、やはりそのメッセージは出てしまいます。このメソッド、どのような使うかよく分かりません。

オブジェクトを削除する

'作業テーブル"wtbl当月集計"を削除します
DoCmd.DeleteObject acTable, "wtbl当月集計"


通常使われているテーブルやフォームなどのオブジェクトを削除することはまずないでしょう。しかし、一時的に作成した作業用のテーブルなどは、VBAから削除する機会もあると思います。例えば、次の例は、データ定義クエリーによって新たにテーブルを作り直すケースです。この場合、事前にテーブルを削除しておく必要があります。

DoCmd.SetWarnings False
'既存テーブルを削除
DoCmd.DeleteObject acTable, "wtbl当月集計"
'テーブルを作成するデータ定義クエリーを実行
DoCmd.OpenQuery "qdef当月集計"
DoCmd.SetWarnings True

オブジェクトを再描画する

'フォーム"frm処理中メッセージ"を再描画します
DoCmd.RepaintObject acForm, "frm処理中メッセージ"

※通常は、フォームを開いたあと、時間的な余裕があればそのフォームをわざわざ再描画させる必要はありません。しかし、この例のような「処理中メッセージ」のフォームを表示させるようなケースでは、そのあとにさまざまな処理(VBAのループ処理など)に入ってしまうことが多いので、そちらにWindowsの処理が占有されてしまい、フォームが完全に描画されない場合も多々あります(フォームの領域が白く抜けた状態になる)。このような場合に、フォームを開いてすぐにこのメソッドを実行し、それからVBAの内部処理に入るようにすれば、フォームを完全に描画させることができます。

オブジェクトを送信する

'テーブル"社員マスタ"をHTML形式のファイルとして添付して、"abcdef@ghijk.com"宛てに送ります
DoCmd.SendObject acSendTable, "社員マスタ", acFormatHTML, "abcdef@ghijk.com"

※Outlookで実行してみましたが、Outlook側の異常終了でうまく動作しませんでした。原因はわかりません。
※メッセージの件名やCC、メッセージ本文もパラメータとして指定できるようです。詳細はヘルプをご覧ください。

| Index | Prev | Next |

 

Copyright © T'sWare All rights reserved