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
よろしくお願い致します。
No.1ベストアンサー
- 回答日時:
Rich53さんとともに、No.1575853で回答した者です。
(1)下記のマクロにて、
オブジェクト名を指定する場合(→「DataTable![氏名]」の場合)は、それがどの種類のオブジェクトであるかを明示する必要があります。
「DataTable!氏名」を「Forms!DataTable!氏名」と指定してやれば、問題は解消すると思います。
なお、Meを使用した場合は、そのイベントが起動したオブジェクト上で、指定されたコントロールを探すため、FormsやReportsといった指定は不要(無用)になります。また、その方が処理も速くなるそうです。
詳しくはヘルプを参照下さい。私のはその「うろ覚えの受け売り」なので(汗)
(2)下記のマクロにて、
特にコントロール移動を指定しない場合は、「タブストップ」がTrueに設定されたコントロールのうち、最も「タブ移動順」が早いものがフォーカスを受け取ります。
指定しなかったからと言って、エラーにはなりません。
但し、続く操作が、「貼付(Paste)」など、フォーカスを受けたコントロールに対してのものだった場合などは、話がかわります。
私がNo.1575853で出した例の場合も、サブフォームでレコード移動をさせるために、そのサブフォーム内のコントロールに移動させてから、オブジェクト指定なしでGoToRecordを実行させています。
(これは、私がサブフォームのレコード移動の方法を、他に知らないためです(汗))
No.2
- 回答日時:
(1)
Meプロパティは、そのコードを実行しているオブジェクトを参照します。
例えば、
Forms![フォーム名]
と同意です。
フォームを参照する場合はFormsオブジェクト、レポートを参照する場合はReportsオブジェクトの指定が必要です。
(2)
コードの実行に影響を与えないためです。
DoCmd.GoToControl "氏名"ではなく
Me![氏名].SetFocusを使用しましょう。
(ヘルプではSetFocusの使用を勧めています。)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) Accessフォームで全レコードを指定のExcelのセルへ転送し印刷する方法について 2 2022/09/08 18:23
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 6 2022/06/08 12:55
- Visual Basic(VBA) ユーザーフォームの表示を追加したい 2 2023/03/26 23:18
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2022/04/01 12:11
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- その他(クラウドサービス・オンラインストレージ) Google ColabでGoogleドライブのサブフォルダにファイルを生成する方法 1 2022/10/31 17:37
- その他(プログラミング・Web制作) 入力フォームへ、データを自動的に入力するプログラム。どうやって作る? 4 2023/01/16 10:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセスVBAのMe!と[ ]
-
文字列で小数点以下の0を削除し...
-
VBA エンターキーでイベントに...
-
エクセルVBAでセル番地を指定し...
-
Excel2007 でのチェックボック...
-
Access からオブジェクトとして...
-
現在アクティブになっているオ...
-
日本語の文字化けを直す方法
-
【エクセルのマクロ】クリップ...
-
サブルーチンにオブジェクト名...
-
PowerpointVBAで指定のShapeオ...
-
[C#] DataGridViewの項目名
-
コードでオブジェクトを最前面に
-
構造体の静的な初期化
-
Excelを閉じるときVBAプロジェ...
-
Excel VBA でPictureBoxオブジ...
-
「SHDocVw」の意味
-
「ご処理進めて頂きますようお...
-
「PC Helpsoft Driver Updated...
-
エクセルで、日付を入力すると...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アクセスVBAのMe!と[ ]
-
VBA エンターキーでイベントに...
-
エクセルVBAでセル番地を指定し...
-
【エクセルのマクロ】クリップ...
-
Excel VBAでマウスの左クリック...
-
エクセルのデータをwebフォーム...
-
文字列で小数点以下の0を削除し...
-
Excel2007 でのチェックボック...
-
日本語の文字化けを直す方法
-
現在アクティブになっているオ...
-
ユーザーフォームのインポート...
-
Accessのフォーム上にエクセル...
-
コードでオブジェクトを最前面に
-
構造体の静的な初期化
-
Access からオブジェクトとして...
-
VBAで選択範囲外の図形(オブジ...
-
【VBA】ワークシート上に画像フ...
-
PowerpointVBAで指定のShapeオ...
-
Imageコントロールにグラフを表...
-
【エクセル】複数のTextBoxに共...
おすすめ情報