• ベストアンサー

[Access2000] フォーム間で値の受け渡し

yoishoの回答

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

MsgBox は、関数ですので、引数のセットを ( ) で囲みますが、OpenForm は、メソッドですので、( ) で囲みません。ですから、 DoCmd.OpenForm ("フォーム名, , , , , , "OpenArgsの内容") のような記述はできませんので、当然エラーになります。 ちなみに、"フォーム名" は、文字列の値ですので、("フォーム名") と記述することもできます。 ですから、DoCmd.OpenForm ("フォーム名"), , , , , , (“OpenArgsの内容”) と記述することは、問題ありません。 ("フォーム名・・・のような ( の書き出しでエラーが出ないのは、上記の理由からです。 以下蛇足になりますが、コードの書き方についての個人的な趣味でのアドバイスです。 DoCmd.OpenForm "フォーム名, , , , , , "OpenArgsの内容" と記述するより多少煩雑になりますが、 DoCmd.OpenForm FormName:="フォーム名", OpenArgs:="OpenArgsの内容" と記述する方が、後でプログラムを見直すときに分かりやすいので、オススメです。

love3factory
質問者

お礼

ありがとうございました。 どうやら私の誤認識だったようですね。 VBAも、VBも今まで経験がなかったので、 まだ今ひとつVB独特の感覚がつかめてないですね…。 引数の書き方、そういえばそういう方法もありましたね。 引数が増えるとちょっと長くなってしまうようですが、 でも引数の意味が明確になってわかりやすいですね。 参考にさせていただきたいと思います。

関連するQ&A

  • access vba 引数

    ACCESS VBA 引数取得について テキストボックスが横に3つ並んでいてその3つは同じデータのレコードで、 例えば | No | Name  |    Tel    |   ボタン  | |~~1~~|~~~山~~~~|~~99-9999-9999~~| |__更新__| | |~~2~~|~~~川~~~~|~~88-8888-8888~~| |__更新__| | |~~3~~|~~~空~~~~|~~77-7777-7777~~| |__更新__| | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ となっていて、ボタンを押して別のフォームを開いてデータの更新をしたいのですが、その押したレコードのNoを引数にして別のフォームを開きたいのです。どのようにコードを書いていいのか分かりません。 今のところ引数はほかにもあるのでそれは取れていて 変数名 = (引数にしたい項目1) 変数名 = 変数名 & (引数にしたい項目2) 変数名 = 変数名 & (引数にしたい項目3) DoCmd.OpenForm "フォーム名", , , , , acDialog, 変数名  (↑openArgs) までは書けています。 押したレコードのNoを引数に加えるというところがどのようにすればいいか分かりません。 教えてください。 よろしくお願いします。m(_ _)m

  • Access2000 フォーム間での値渡しについて

    お世話になります。 フォームA、Bがありまして、AからBに値を渡し、Bフォームの初期表示としたいのですが、 下記ロジックにて値を渡した後にBフォームを開くと消えてしまします。 ************************************************** 呼出し先(Bフォーム) Public Sub 値渡しで展開(値) Text=値 DoCmd.OpenForm B 呼出し元(Aフォーム) Call B.値渡しで展開(値) ************************************************** VBにて同じ方法にて実現できているのですが、VBAでは異なるのでしょうか? ご回答よろしくお願いいたします。

  • Access2000:フォームのテキストフォームに値を代入Part2

    前回も質問して、また違った改良が入りそうなので質問させていただきます。 マクロに「フォームを開く」を登録し、テキストフォーム値を入れることをこれまで手動でしてきました。 今回VBAを使って自動フォーム登録したいと考えています。 上記マクロをVisualBasic変換し、新たなマクロにこのVisualBasicをプロシージャとして登録させます。 DoCmd.OpenForm "フォーム名", acNormal, "", "", , acNormal 変換後上記のようなフォームを立ち上げるプログラムが生成されました。上記フォームのテキストフォーム部に値を代入させたいばあいどういう記述をしてあげればよろしいでしょうか? テキストフォームの名前は”年月”です。 Me![年月]=date ではうまくいきません。 よろしくお願いいたします。

  • OpenForm

    AccessVBAで DoCmd.OpenForm "メインメニュー", acNormal, "", "", , acNormal という記述がありますが、式.OpenForm(FormName, View, FilterName, WhereCondition, DataMode, Window Mode, OpenArgs)で引数を合わせていくと個数があいません。最後のacNormalは、どれでしょうか?

  • 「DoCmd.OpenForm」が実行できない(vbaでフォームを開きたい)

    「フォーム1を開く」vbaで行ないたいのですが エラーになってしまいます。 Sub test1() DoCmd.OpenForm , acNormal, フォーム1 End Sub は「変数が定義されていません」と表示され (「変数の宣言を強制する」にチェックを入れています) Sub test2() DoCmd.OpenForm , acNormal, "フォーム1" End Sub は「引数は省略できません」となります。 Sub test1() DoCmd.OpenForm , フォーム1, acNormal End Sub Sub test2() DoCmd.OpenForm , "フォーム1", acNormal End Sub これにしても同じでした。 「OpenForm」をヘルプで調べてみたところ 「expression 」と「FormName」が「 必ず指定します。」でした。 「expression 」がないからだめなのでしょうか? すいません、助けてください。 よろしくお願いします。

  • VBAのユーザーフォームについて

    ユーザーフォームのコマンドボタンのリストの イニシャルにWorkSheetの全てのシート名を入れるにはどうしたらいいのでしょうか? 戻り値や引数でデータの受け渡しで行うにはどうしたらいいのでしょうか? 初心者でよくその受け渡しがわかりません。 どうぞご教授よろしくお願いします。

  • 異なるフォームに属する関数間でACCESSのレコードセットを受け渡しする。

    msAccess2000のVBAコードの質問です。 元々、全てを理解しているわけではないのにVBAコードを書いているのが無茶なんですが、無茶を承知でプログラミングしています。 あるクエリの結果を、あるフォームで帳票表示しています。この帳票の一レコードにボタンをつけて、クリックイベントで、そのレコードを取得しようとしています。フォームはこの後、閉じられた後、呼び出された親にその、レコードを渡したいのです。 フォームは、親フォームのボタンクリックイベントから、DoCmd.Openformメソッドによって呼び出されるので、戻り値は使えません。 しょうがないので、広域変数rst(DAO.Recordset型)で、受け渡そうと思ったのですが、recordset型は、どうやら参照のようで、フォーム(クエリ?)を閉じると、レコードが壊れてしまうようなのです。 Module1で、 public rst as DAO.recordset として、 Private Sub コマンド34_Click() set Module1.rst=me.recordset ' この中では、rst.fields(*)で、フィールドの値を使えるのですが・・・ END Sub 呼び出した親フォームでは、module1.rst.fields(*)を使用できません。 質問は二つあります。 1)広域変数rstは、上記のような宣言・使用法で問題ないですか? 2)sub またはfunction間にわたって、レコードを渡す、いい方法はないですか?

  • フォーム間でtxtbox値の渡しで教えてください!

    フォーム間でtxtbox値の渡しで教えてください! いつもお世話になっております。今回もいきずまり皆様のお力をお貸ください。 フォーム1からフォーム2を開く時にOpenArgsでtxtboxの値を複数渡し、フォーム2の開くときに分解しようと考えています。 下記コードでやってみたのですが、txtboxの値では無く"txtコード"と"txt性別"2つの文字列を渡しているようです。 txtboxの中の値を渡すにはどのようにしたらよいのか教えてください。 フォーム1のcmdクリック時 DoCmd.OpenForm "フォーム2", , , , acFormReadOnly, , "txtコード/txt性別" フォーム2の開く時 Dim n As Integer Dim strコード As String Dim str性別 As String n = InStr(Me.OpenArgs, "/") strコード = Left(Me.OpenArgs, n - 1) str性別 = Mid(Me.OpenArgs, n + 1) Me!txtコード = strコード Me!txt性別 = str性別 ・・・で結果は txtコードに"txtコード" txt性別に"txt性別"となってしまいます。アドバイス宜しくお願いいたします。

  • ACCESS フォームの値がすぐに表示されない

    フォームの値がすぐに表示されない。 宜しくお願い致します。皆様の知恵をお貸しください。 WinXPでACCESS2000を使っております。 テーブル_在庫には 取引先|商品名|買取金額|売上金額|日付のフィールドがあり A社|みかん|0|10000|2012/11/13 A社|りんご|10000|0|2012/11/13 B社|ぶどう|5000|0|2012/11/13 C社|かき|0|3000|2012/11/13 というレコードがあります。 フォーム_取引先のコンボボックスで、A社を選びコマンドボタンで、 クエリ_取引先買取、クエリ_取引先売上 を実行して、A社だけの取引を抽出し、その結果を フォーム_取引先買取とフォーム_取引先売上 に、表形式で表示させています。 このままでは、フォームが2つになるので、新たに基になるテーブルも クエリも持たない、フォーム_売買を作りました。 このフォーム_売買にテキストボックスを6つ作り次のようにしました。 テキストボックス|コントロールソース ---------------------------------------- テキスト1(取引先)|=Forms![取引先]![コンボ1] テキスト2(買取金額)|=Forms![買取]![テキスト1] テキスト3(売上金額)|=Forms![売上]![テキスト1] テキスト4(買取報償料)|非連結 テキスト5(売上報償料)|非連結 テキスト6(合計金額)|=[テキスト2]+[テキスト4]-[テキスト3]-[テキスト5] ここで、問題になっているのが、フォーム_売買を表示させた時に、テキスト1は 普通にA社と表示されているのですが、テキスト2とテキスト3に金額が表示され ません。 しかし、テキスト4もしくはテキスト5に金額を入力すると、表示されるようになり ます。 テキスト4とテキスト5のどちらかには必ず金額を入力するので、このままでも とりあえずは計算出来ているのですが、できれば、フォームが表示された時に 初めからテキスト2とテキスト3には金額が入っていたほうがいいと思い、あれ これ試してみたのですが、出来ませんでした。 フォーム_取引先のコマンドボタンは次のように実行しています。 Dim stDocName As String Dim stDocName1 As String stDocName = "取引先売上" DoCmd.OpenQuery stDocName, acNormal, acEdit stDocName1 = "取引先買取" DoCmd.OpenQuery stDocName1, acNormal, acEdit DoCmd.OpenForm stDocName, acNormal DoCmd.OpenForm stDocName1, acNormal DoCmd.OpenForm "売買", acNormal どうすれば、フォーム_売買が表示された時に、テキスト2とテキスト3に金額が 入っているようになるのでしょうか。 素人が見よう見まねで作っておりますので、おかしい点が多々あるかと思い ますが、ご教授のほど、よろしくお願い致します。

  • access フォームについて

    access2003にて登録フォームを作成しています。 このフォーム内に入力したデータを登録ボタンを押し、「登録しますか」のメッセージに 「いいえ」とすれば保存せずにこのフォームを閉じる。 「キャンセル」とすれば保存せずにフォームに戻る。 「はい」とすれば保存して閉じたいです。 しかし、以下の式を実行すると 「いいえ」はバッチリ希望通りに動くのですが、 「キャンセル」をすると保存されてフォームに戻り、 「はい」とすると保存されずにフォームが閉じられてしまいます。 何がまずいのでしょうか・・・。 ----- Private Sub Form_BeforeUpdate(Cancel As Integer) Dim Ret As Integer Ret = MsgBox("登録しますか?" & vbCrLf & " " & vbCrLf & "「いいえ」を選択すると保存せず閉じます", vbYesNoCancel) '「いいえ」を選択したら、保存せずに閉じる If Ret = vbNo Then DoCmd.Close acForm, "振返りデータ", acSaveNo '「キャンセル」を選択したら、保存せずにフォームに戻る Else If Ret = vbCancel Then Else DoCmd.Close acForm, "振返りデータ", acSaveYes End If End If End Sub