フォーム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とするとちゃんと代入された値が表示されます。
No.4ベストアンサー
- 回答日時:
念のため確認しましたが、Option Explicitなしでも、
質問のソースの書き方で Public 変数を参照出来ました。
My_Module.Hensu とした方が確実みたいですが、
今回の不具合の原因では無さそうですね。
・フォームAにPublic変数を作成して解決
フォームBのソースは正常だった?
・イミディトウインドウで?Hensuと入力しEnterを押すとNull
Public変数でもなく、新規のローカル変数でもなく、
何か別の変数を参照している?
謎が多いですね。(^^;
以下、Access2000での検証結果を書いておきます。
----My_Module----
Option Compare Database
Public Hensu As Long
----------------
----フォームA----
Option Compare Database
Private Sub コマンド0_Click()
Hensu = 100
End Sub
-----------------
----フォームB----
Option Compare Database
Private Sub コマンド0_Click()
MsgBox "Type: " & TypeName(Hensu) & " / Value: " & Hensu
End Sub
-----------------
フォームAでボタンをクリック後、
フォームBのボタンをクリックすると。
Type: Long / Value: 100
No.3
- 回答日時:
考え方はあっているが、実装方法がまずいのでは?
>(2) フォームAにボタンを作成し、そのクリックイベントに、
>Hensu=Text1.Value
>というコードを記述しました。
>(3) フォームBにボタンを作成し、そのクリックイベントに、
>Text1.Value=Hensu
>というコードを記述しました。
Option Explicit を入れていないために、ローカル変数Hensuが勝手に作られているのかなと思います。
(2)で「Hensu=Text1.Value」とありますが、標準モジュールのHensuを参照するためには、「My_Module.Hensu=Text1.Value」となるはずです。
(3)も同じで「Text1.Value=My_Module.Hensu」となります。
必ず、Option Explicitを全てに入れましょう。
基本です。
お答えありがとうございます。
>「My_Module.Hensu=Text1.Value」となるはずです。
>「Text1.Value=My_Module.Hensu」となります。
なるほどそういうように記述するものなのですね。勉強になりました。
No.2
- 回答日時:
>考え方というかコードの書き方などは問題が無いということでしょうか?
肝心な事を書きませんでしたね。(^^;
質問のコードの書き方で、問題ないと思います。
(Access2000で確認してみましたが、正常でした)
何らかのミスがあったのだと思います。
>ちなみにフォームBのコードウインドウのイミディトウインドウで?Hensuと入力しEnterを押すとNullという表示が還って来たので、変数のつづり間違いで勝手に誤字によるバリアント型変数が出来た可能性は大です。
う~ん。Null と表示されたのですね?
であれば、つづり間違いではないと思います。(^^;
つづりを間違えて、存在しない変数を使った場合、値は Empty で、
空行が表示されるはずです。Null ではありません。
これをテキストボックス等に代入すると Null に変換されますが、
変数の方は Empty のままです。
謎が深まりますね。(^^;
?TypeName(Hensu) としてみれば、何か分かったかも知れないですが、
もうソースは残ってないですよね? 真相は闇の中かな・・・
>Option Explicit ステートメントは使用していませんでした。
特別なこだわりがあって、使用していないなら別ですが、
通常は使用する事が推奨されます。
理由は、今回の様なバグを防ぐためです。
これを機会に、利用することを検討してみて下さい。
下記など参考になるかな。
http://www.nbcom.co.jp/PC-Support/FAQ/acc/ht/acc …
http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub0 …
No.1
- 回答日時:
>意に反しHensuの中身はNullでした。
まず、Long型で宣言した変数が Null になることはありません。
Hensu = Null とするとエラーになるはずです。
Nullを代入できるのは Variant 型です。
まず、本当に Null なのか確認して下さい。
本当に、Hensu の値が Null であれば、別の変数を参照しています。
下記の可能性が高いと思います。
・フォームBで Hensu と言う名前が使われている。
Private で宣言した変数や、フォームに貼り付けたコントロールなどに、
同名の物があれば、そちらが優先して使われます。
次に怪しいのは、下記。
・Option Explicit ステートメントを使用せず、変数名を間違えた場合
新しい変数が作成されます。(型は Variant 値は Empty)
Text1.Value に Empty を代入すると、値は Null になります。
-----------------------------------------------------------
上記で解決しない場合、原因を特定するために・・・
・Hensuの名前を変更してみて下さい。
・Option Explicit ステートメントを使用して下さい
・デバッグ機能(ブレークポイント、ウォッチ式など)活用して下さい
フォームBの代入行にブレークポイントを指定して止め、
その状態で、ウォッチ式に Hensu を追加してみる、など。
-----------------------------------------------------------
念のため、Public変数に関する注意事項・・・
・起動時に初期化される
・End ステートメントを実行すると初期化される
・何かエラーが発生し、中断した場合も初期化される
(初期化されると、Long型の場合は 0 になります)
結構簡単に消えるデータなので、ご注意下さい。
一時的なデータ保存に利用するのは問題ないと思いますが、
多用は禁物です。
-----------------------------------------------------------
>フォームAのテキストボックスに入力された値をフォームBで使用したい
ご存知かもしれませんが、フォームAが開いているなら、
Forms![フォームA]![Text1]
で、フォームの値を直接利用する方法もあります。
いろいろな面でアドバイス頂きありがとうございました。
考え方というかコードの書き方などは問題が無いということでしょうか?
その後標準モジュールではなくフォームAにPublic変数を作成しフォームBに読み取らせるということで何とか目的は果たせました。
> Option Explicit ステートメントを使用せず、~ Text1.Value に Empty を代入すると、値は Null になります。
Option Explicit ステートメントは使用していませんでした。
ちなみにフォームBのコードウインドウのイミディトウインドウで?Hensuと入力しEnterを押すとNullという表示が還って来たので、変数のつづり間違いで勝手に誤字によるバリアント型変数が出来た可能性は大です。
いずれにせよ親切な回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- PHP php 入力画面から確認表示画面へ情報の受け渡しについて。 1 2023/06/07 18:00
- JavaScript ソースコードは下の共有コードサイト「張り紙」にあります。 入力フォームの javascript で 1 2022/05/11 11:01
- PHP php 確認表示画面で値をSESSIONから取り出す理由の解釈は正しいでしょうか? 1 2023/06/09 17:39
- Access(アクセス) アクセス 意図せずサブプロシージャを移動してしまうのを止めたい 1 2022/09/02 09:19
このQ&Aを見た人はこんなQ&Aも見ています
-
【お題】NEW演歌
【大喜利】 若い人に向けたことは分かるけど、それはちょっと寄せ過ぎて変になってないか?と思った演歌の歌詞
-
大人になっても苦手な食べ物、ありますか?
大人になっても、我慢してもどうしても食べれないほど苦手なものってありますよね。 あなたにとっての今でもどうしても苦手なものはなんですか?
-
とっておきの手土産を教えて
お呼ばれの時や、ちょっとした頂き物のお礼にと何かと必要なのに 自分のセレクトだとついマンネリ化してしまう手土産。 ¥5,000以内で手土産を用意するとしたらあなたは何を用意しますか??
-
プリン+醤油=ウニみたいな組み合わせメニューを教えて!
プリンと醤油を一緒に食べると「ウニ」の味がする! というような意外な組み合わせから、新しい味になる食べ物って色々ありますよね。 あなたがこれまでに試した「組み合わせメニュー」を教えてください。
-
うちのカレーにはこれが入ってる!って食材ありますか?
カレーって同じルーから作っても、家庭によって入っているものや味が微妙に違っていて面白いですよね! 「我が家のカレーにはこれが入ってるよ!」 という食材や調味料はありますか?
-
Accessでグローバル変数を宣言して定数を定義したい
その他(データベース)
-
Accessのレポート上のテキストボックス値を設定したい
その他(データベース)
-
ExcelのVBA。public変数の値が消える
Visual Basic(VBA)
-
-
4
Access サブフォームでの選択行の取得
その他(データベース)
-
5
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
6
AccessのWHERE句において、変数は使用できますか?
Access(アクセス)
-
7
【ACCESS】フォーム名/コントロール名を文字列型変数で指定するには
Access(アクセス)
-
8
ACCESSのフォームからレポートへの変数の引渡し
Excel(エクセル)
-
9
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
10
フォームのテキストボックスなどの変数名を標準モジュールから参照は可能か?
Visual Basic(VBA)
-
11
Access 最後のレコードに到達するまでループ処理を行う方法
Access(アクセス)
-
12
Accessの桁区切りについて教えてください。
Access(アクセス)
-
13
フォームを開くときに、コンボボックスの値を選択(アクセスVBA)
Visual Basic(VBA)
-
14
Accessで、フォームからフォームへ値を引き継ぐやり方
Access(アクセス)
-
15
クエリで出来た表にチェックボックスを追加する
その他(Microsoft Office)
-
16
ACCESS2010 実行時エラー 2766
その他(プログラミング・Web制作)
-
17
Accessで別テーブルの値をフォームに表示したい
その他(データベース)
-
18
Accessでフォームから別フォームのテキストボックスの値を設定する
Visual Basic(VBA)
-
19
2つ目のレコードの値を取得するには?
Access(アクセス)
-
20
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
クリックイベントなのに、2回ク...
-
モーダルフォームとモードレス...
-
Microsoft Formsの「個人情報や...
-
VBAでユーザーフォームを再表示...
-
Excelにて、ユーザーフォームで...
-
VBA(エクセル)のユーザー...
-
ExcelVBAのユーザーフォームの...
-
エクセルVBAのフォームを最...
-
ユーザーフォームのテキストボ...
-
アクセスのUserFormにはInitial...
-
Accessで、一つのフォーム画面...
-
C#でボタンクリックをキャンセル
-
Form_Load と Form_Activate の...
-
Access-VBAのPublic変数につい...
-
VB.NETでフォームロード中のエ...
-
アクセス2013 フォームが...
-
VBA フォームに入力された...
-
vb2008にてDefaultCellStyleが...
-
Hideについて(.NET)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
ExcelVBAのユーザーフォームの...
-
クリックイベントなのに、2回ク...
-
エクセルVBAのフォームを最...
-
ユーザーフォームのテキストボ...
-
VBAでユーザーフォームを再表示...
-
Form_Load と Form_Activate の...
-
Microsoft Formsの「個人情報や...
-
モーダルフォームとモードレス...
-
Hideについて(.NET)
-
ACCESSのフォーム、開くんです...
-
フォームウィンドウを最前面に...
-
VBA(エクセル)のユーザー...
-
ユーザーフォーム上に現在日時...
-
Excelにて、ユーザーフォームで...
-
コントロールの存在確認
-
'ユーザーフォーム右上隅の[×...
-
MSGBOXのフォント大きさ変更
-
フォームのテキストボックスな...
-
Accessで、一つのフォーム画面...
おすすめ情報