- ベストアンサー
ACCESSマクロ、Me![氏名] その他について
ACCESSの勉強をしています。temp = Me![氏名] その他がわかっていません。 わかりやすく教えていただけますか? (1)下記のマクロにて、temp=Me![氏名]ではOK, temp=DataTable![氏名]、temp=DataTable!氏名、temp=DataTable.氏名ではNG この理由? (2)下記のマクロにて、DoCmd.GoToControl "氏名"のラインが無くても正常に動きます。 これの理由? 基本情報: テーブル名:「データテーブル」--フィールド「氏名」,「通番」を持つ フォーム名:「DataTable」--「データテーブル」をソースとし、フィールド「氏名」,「通番」を持つ。 フォーム上のボタン名:「実行」(on click) Private Sub 実行_Click() DoCmd.GoToRecord acForm, "DataTable", acFirst Do While [NewRecord] = False DoCmd.GoToControl "氏名" '----このラインがなくても正常に動く temp = Me![氏名] ' temp = DataTable![氏名]----これではうまく行かない ' temp = DataTable!氏名 -----これでもうまく行かない ' temp = DataTable.氏名 -----これでもうまく行かない 'うまく行くとは、tempにきちんとデータが取りこまれる。うまく行かないとは、 Object Requiredとしかられます。 Me![通番] = 1 DoCmd.GoToControl "氏名" '----このラインがなくても正常に動く DoCmd.GoToRecord acForm, "DataTable", acNext Loop (マクロで何をやろうとしているかは意味がありませんので、無視してください) End Sub よろしくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Rich53さんとともに、No.1575853で回答した者です。 (1)下記のマクロにて、 オブジェクト名を指定する場合(→「DataTable![氏名]」の場合)は、それがどの種類のオブジェクトであるかを明示する必要があります。 「DataTable!氏名」を「Forms!DataTable!氏名」と指定してやれば、問題は解消すると思います。 なお、Meを使用した場合は、そのイベントが起動したオブジェクト上で、指定されたコントロールを探すため、FormsやReportsといった指定は不要(無用)になります。また、その方が処理も速くなるそうです。 詳しくはヘルプを参照下さい。私のはその「うろ覚えの受け売り」なので(汗) (2)下記のマクロにて、 特にコントロール移動を指定しない場合は、「タブストップ」がTrueに設定されたコントロールのうち、最も「タブ移動順」が早いものがフォーカスを受け取ります。 指定しなかったからと言って、エラーにはなりません。 但し、続く操作が、「貼付(Paste)」など、フォーカスを受けたコントロールに対してのものだった場合などは、話がかわります。 私がNo.1575853で出した例の場合も、サブフォームでレコード移動をさせるために、そのサブフォーム内のコントロールに移動させてから、オブジェクト指定なしでGoToRecordを実行させています。 (これは、私がサブフォームのレコード移動の方法を、他に知らないためです(汗))
その他の回答 (1)
- GreatDragon
- ベストアンサー率46% (186/402)
(1) Meプロパティは、そのコードを実行しているオブジェクトを参照します。 例えば、 Forms![フォーム名] と同意です。 フォームを参照する場合はFormsオブジェクト、レポートを参照する場合はReportsオブジェクトの指定が必要です。 (2) コードの実行に影響を与えないためです。 DoCmd.GoToControl "氏名"ではなく Me![氏名].SetFocusを使用しましょう。 (ヘルプではSetFocusの使用を勧めています。)
お礼
ありがとうございます。理解が進みました。
お礼
ありがとうございます。理解が進みました。