• ベストアンサー

基本ですがVBA教えてください。

access2000を使っています。Aというフォームにボタンをつくり、Bというフォームを開きたいと思っています。Bというフォームは、単票式でつくってあり、[社員ID][社員名][グループ名]となっております。 このとき、Aのフォームの【高木さん】というボタンを押すと、Bのフォームの高木さんのページが開くようにしたいです。どうやってコードを書いていいのかわかりません。。。教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • yoisho
  • ベストアンサー率64% (331/516)
回答No.2

Aフォームの「高木さん」コマンドのクリック時イベントに、以下のコードを記述してください。 Private Sub 高木さんコマンド_Click() '引数 OpenArgs を「高木さんの社員ID」として、Bフォームを開く DoCmd.OpenForm FormName:="Bフォーム名", OpenArgs:=高木さんの社員ID End Sub 次に、Bフォームの読み込み時イベントに、以下のコードを記述してください。 Private Sub Form_Load() '社員ID のテキストボックスへフォーカスを移す Me![社員ID のテキストボックス名].SetFocus '高木さんの社員ID のレコードへ移動 DoCmd.FindRecord OpenArgs End Sub HELP で、OpenForm メソッド、OpenArgs プロパティ、Load イベント、FindRecord メソッド を確認してみてください。

その他の回答 (1)

  • Te-Sho
  • ベストアンサー率52% (247/472)
回答No.1

Bと言うフォームを開きたいだけなら Aフォームのボタンのイベントのクリック時で...ボタンを押してコードビルダを選ぶか、コンボボックスでイベントプロシージャを選んでから...ボタンを押すとVisualBasicEditerが開き、ボタンに対するクリックイベントのプロシージャの部分にカーソルが移動します。 そこにコードを書くとボタンを押したときにそのVBAが動きます。 docmd.openform "b" でbと言う名前のフォームが開きます。 VisualBasicEditerでHelpを開くとVBAのHelpが引けます。 質問タブでopenformを検索すれば、イロイロなモードでの開き方や抽出条件設定の方法が書いてあります。 ご参照下さい。

nani-o
質問者

お礼

ありがとうございます。helpもどれを引いていいかすら、まだホントショボチンなので、皆さんのアドバイス助かります!常にhelpと戦っていく気はありますので、ただ、厳しくなりましたらまたご質問しますので、お答えよろしくお願いします。 nani-oという名前どっかに覚えておいて頂ければ幸いです。ありがとうございました。

関連するQ&A

  • VBAがわからない!

    いつもお世話になってます…。 Accessでいろいろとがんばってるんですが、VBAに関してはほとんど無知に近いので、やりたいように動かすことができません! フォームから削除ボタン押下後にA、Bと2つのテーブルから同じIDのレコードを削除したいんです。 フォームの構成はAが親フォーム、Bが子フォームになります。 AのテーブルはIDが主キーに設定してあります。 とりあえずSQLをきって削除させようとしたんですが、Aのテーブルの全レコードが削除されてしまいました^^; VBAで2つのテーブルを同時に削除するSQLを発行する方法を教えてください! お願いします。

  • Access-VBAのPublic変数について =基本的な事です=

    フォームAのテキストボックスに入力された値をフォームBで使用したいのですが、調べるとPublic変数に値を代入しておけばフォームAを閉じても値を保持できるとの事でした。 そこで、 (1) 標準モジュール(My_Moduleという名前)を作成しそこに1行Public Hensu as Long と定義しました。 (2) フォームAにボタンを作成し、そのクリックイベントに、 Hensu=Text1.Value というコードを記述しました。 (3) フォームBにボタンを作成し、そのクリックイベントに、 Text1.Value=Hensu というコードを記述しました。 フォームBのボタンをクリックすると、Text1に値が代入されるかと思いましたが、意に反しHensuの中身はNullでした。 どのようにすればフォームBで変数の値を取得することが出来るのでしょうか? ちなみにフォームAからPublic Hensuには値が代入されているようで、イミディトウインドウで?Hensuとするとちゃんと代入された値が表示されます。

  • Access2013 vbaサブフォームのレコード

    [Access2013 vba] ■したいこと サブフォームのレコードの中から、一レコードだけをチェックボックスなどで選択したいのですが、どのようにしたら出来ますでしょうか。 複数行選択は出来ないようにしたいです。 選択したのち、メインフォームの選択ボタンを押すと、そのレコードのID番号を取得して、呼出元のフォームのIDフィールドに代入したいです。 ■画面の流れ・・・ Aフォーム → 帳票型Bフォームで、レコードを選び「開く」ボタンを押す→ B 'メインフォームとCサブフォーム)が開く Cサブフォームのレコードをチェックボックスにチェックを入れて選択する B ' メインフォームの「選択」ボタンを押すと B ' メインフォームと、その前のBフォームが閉じて Aフォームに戻り、AフォームのIDフィールドに選択したIDが格納される。 よろしくお願いします。

  • Access2003レポートの連続印刷方法

    以下のような仕様にて、Access2003で取引案件管理データベースをつくっています。 一案件ごとにA,B,Cと三種類のレポートがあり、それを順番に印刷する機能を追加しようとしているのですが、方法がわからず、アドバイスをお願い致します。 *仕様* ・ユーザはアクセスオープン時に、自身のIDとパスワードを入力 ・認証が通ると、総合メニュー画面が起動される。 総合メニューには「入力フォーム起動ボタン」と「レポート印刷ボタン」がある ・DB内部でIDとユーザの所属部署の紐付けを行っており、入力フォームを起動すると、自分の所属部署の担当案件だけが表示される (フォームのコードで、グループごとにフィルタをかけている) ・レポートは案件ごとにA,B,Cと三枚に分かれている ・入力フォーム内にも、印刷ボタンがあり、それを押すと表示されている案件のレポートがA、B、Cの順番で出力される。 コードは以下の通り DoCmd.OpenReport "レポートA", acViewNormal, WhereCondition:="[案件名] ='" & Me.案件名 & "'" DoCmd.OpenReport "レポートB", acViewNormal, WhereCondition:="[案件名] ='" & Me.案件名 & "'" DoCmd.OpenReport "レポートC", acViewNormal, WhereCondition:="[案件名] ='" & Me.案件名 & "'" *今回つくりたい機能* 総合メニューの「レポート印刷ボタン」の中身を実装したいと考えています。 これを押すと、案件ID「001」のレポートA→B→C→案件ID「002」のレポートA→B→C→案件ID「003」・・というように、案件ごとにレポートA,B,Cがセット(連続)で印刷できるようにしたいのです。 上の構文と、レコード送りを組み合わせればいいのではないかと予想はついているのですが…緊急対応で、自分でコードを試行錯誤している時間がないもので、コードを上のような機能を実現できるコードを教えて頂けますと幸いです。宜しくお願い致します。

  • アクセス2007 コマンドボタン ウイザード

    2007を使い始めたところですが、教えてください。単票フォーム(A)のデザインで、コマンドボタンを貼り付けて、別単票フォーム(B)を「フォームを開く」のをウィザードを利用して行おうとしています。その中で、「特定のレコードを表示する」を選択した場合、フォーム(B)のフィールドだけ表示されて、フォーム(A)のフィールドが表示されません。2002では、両方表示されて、「<ー>」ボタンを押せば、うまく目的のレコードの単票フォームが表示されていたのですが、どうなっているのでしょうか?・・・・・・フォーム(A)のフィールドが表示されません。・・・・・・よろしくおねがいします。

  • Accessのwhere条件式について教えて下さい

    初歩的内容の質問ですみません。 Access初心者のため色々施行錯誤しながらやっているのですが、 行き詰まりました。 「フォームを開く」でWhere条件式の設定がうまくいきません。 フォームAにボタンをクリック時フォームを開くを設定しました。 開くフォームはフォームBです。 共通のフィールドの"顧客ID"でフォームを連動させてたいのですが、 where条件式に[顧客ID]=[Forms]![フォームB]![顧客ID]と入力しても反映されません。 フォームBの顧客IDの名前を替えても反映されず、何も表示されません。 ="[顧客ID]=" & =[Forms]![フォームB]![顧客ID]にするとエラーになります。 どのような式を入れると同じIDのものが表示されるようになりますか? 教えて下さい。 よろしくお願い致します。

  • Accessのエラーメッセージについて

    アクセス初心者です。 仕事に必要なため、ネットや本を見ながらなんとかシステムを作成しています。 どのようなものかというと テーブルAとテーブルBがあり Aには社員IDと社員名 Bには社員別の作業件数を入れています。 クエリには社員ID、社員名、件数が出ます。(テーブルAの社員IDとテーブルBの社員IDをリレーションシップでつなぎました) フォームから入力するのですが、フォームの社員名のところ『#Name?』と出て、社員名が出てきません。『このコントロールのコントロールソースが無効です』というエラーメッセージが出ました。 クリックすると『指定したフィールドがフィールドリストに存在しません』と出ています。これはどういう意味ですか? でもクエリには社員名は反映してちゃんと出ているので、何が悪いのかわかりません。 初心者なのでなるべく分かりやすく教えていただければ助かります。

  • VBA初心者の平貝と申します。どうぞよろしくお願いします。

    VBA初心者の平貝と申します。どうぞよろしくお願いします。 Accessで複数のクエリーが開いてあるときに、それらを一度に閉じるボタンをフォームに配置したいと考えています。 素人考えではありますが以下の手順が必要であり、準じたコードを書かないといけないと思っています。 スタート 1) 現在開いている複数のクエリーのオブジェクト名を取得する 2) 開いている任意のクエリー数分のループを組む 3) Docmd.Close にオブジェクト名を引数として渡しクエリーを一つ一つとじらせる 4) 全てのクエリーが閉じたら終了 終了 条件  A) 開いてあるクエリーの数は任意 B) 閉じるボタンのあるフォームは閉じない いろいろ調べましたが最初の 1) 現在開いている複数のクエリーのオブジェクト名の確認の仕方、でつまづき先に進んでいません。。 どなたか、このようなサンプルコードをご存知の方は紹介ください。

  • Accessの再クエリについて

    Win2000、Access2000を使用しています。 1.すでに入力してあるデータ(Aフォーム、単票形式)の内容を変更して   「登録ボタン」をクリックすると再クエリを行う 2.「Bを開くボタン」をクリックすると、Bフォーム(単票形式)が開く 3.BフォームにはAフォームの変更が反映されている。 という流れにするため、Aフォームの登録ボタンをクリックしたら、再クエリをするようにVBを組みました。 AとBは、ID(オートナンバー型)でリレーションを組んでいます。 Aフォームは閉じないでそのまま表示させておき、Bフォームを開くボタンを作成しました。 ところが、再クエリをすると、1件目のデータを表示させてしまいます。 変更したフォームが2件目とか3件目であっても1件目を表示させてしまうので、変更したフォームを表示させたいんですが、どなたかおわかりになる方がいましたら、お教えください。 再クエリのVBは以下のとおりです。 Private Sub btn_登録_Click() Dim touroku As Integer touroku = MsgBox("このデータを登録しますか?", vbYesNo + vbQuestion, "登録") If touroku = vbYes Then DoCmd.Requery End If End Sub 説明がわかりずらくって申し訳ありませんが、よろしくお願いします。

  • accessでフィールドを連携させたい

    access2002をつかっています。 テーブルAの中のリストに、IDのフィールドがあり、 そこにひもづいたテーブルBがあります。 (例えば、テーブルAが人のデータで、  テーブルBがその人との対応履歴です。) フォームで、テーブルAの一覧リスト(表形式)がまず見られるものをつくりました。 そこから、「詳細をみる」というボタンをつけて、 押すと、リストBの中でひもづいているものだけ見えます。(単票形式で) 見る分にはこれでよかったのですが、 そこから新規にテーブルBに書き込むときに、 AのIDを勝手に書き込んでほしいのです。 (引き継いでほしい。) でも、現状では、そのボタンを押して、 その先で新規に、Bへデータを書き込もうとすると、 ID部分は引き継がれません。 最初からサブフォームなどのウィザードでつくれば よかったのかもしれませんが、 この状態からうまくできる方法はありませんか? とっても分りづらい説明で申し訳ないのですが、 もしわかる方がいらっしゃいましたら、教えてください。