初歩的な質問で申し訳ありません、
googleでもどのように検索してよいのかわからないので教えてください。
Userformにて作成したコード内にhogehogeという変数を宣言したとします。
これをPublic Sub CommandButton1_Click()内でhogehogeに文字列abcを代入します。
そしてcall を使ってmodule1の処理を行うのですが、
module1内で変数hogehogeに文字列abcが既に代入されているものとして
hogehogeを使いつつ、処理を続けるにはどのようにすればよいのでしょうか?
callで呼ぶ際に変数hogehogeの受け渡しなどが必要なのでしょうか?
(ちなみに全てPublic Subで書いております)
初心者なので質問がおかしいかもしれませんが
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
標準的なコードの書き方があります。
具体的なコードがないので、こちらは想像の範囲なので、行き違いがあるのはご容赦願います。
>Userformにて作成したコード内にhogehogeという変数を宣言したとします。
変数を共有化(厳密にはグローバル化されていない、プロジェクト内のみ共有)するには、通常、「標準モジュール」で、プロシージャ外の変数は、Public変数になります。そして、明示的に、Public ○○と書きます。仮に、それが、UserFormモジュール内で使用されるものでも、標準モジュールに書くことになります。
>これをPublic Sub CommandButton1_Click()内でhogehogeに文字列abcを代入します。
そういう書き方は、本当に特殊な例を除いて書きません。Privateキーワードだけです。
つまり、ローカルモジュール(シートモジュール、ThisWorkbookモジュール、UserFormモジュール)には、Public キーワードは用いません。また、そこへのCallでの、呼び出しもしません。共有化させる場合は、一般的には「標準モジュール」を利用します。
しかし、別途、ユーザー定義関数やサブプロシージャで、引き数を参照渡し/値渡しで、変数の内容を渡すことがあります。この方が安定していますが、多少、コードの可読性が落ちます。
>callで呼ぶ際に変数hogehogeの受け渡しなどが必要なのでしょうか?
具体的にどのようなコードになっているか分かりませんし、Callでどう呼ぶのかは分かりませんが、引き数を設ければ、それはそれで済みます。
例:
'UserForm1 上 CommandButton1とTextBox1 を用意
'UserFormモジュール内
Private Sub CommandButton1_Click()
Dim a As Variant
a = Val(TextBox1.Value)
Call Test1Ref(a)
MsgBox a
End Sub
'標準モジュール、そのままで参照渡しになっている
Public Sub Test1Ref(arg1 As Variant)
arg1 = arg1 * 10
End Sub
ただし、この程度ならば、UserFormモジュール内で、Test1Refを置いても同じです。その時は、Publicキーワードは不要です。
No.2
- 回答日時:
はい、できますよ。
いくつかポイントがあるのでそちらを説明したのちにコードを掲載しておきます。
■他のモジュールの変数にアクセスしたい時
アクセスしたい変数はDimではなくPublicで宣言する必要があります。
スコープ範囲が外からでもアクセスできるようにする必要があるからです。
Publicで宣言した後、どのようにアクセスすればよいかですが
たとえば、Sheet1という名前のシート内で宣言したPublic変数にアクセスしたい時は
debug.print Thisworkbook.Sheets("Sheet1").変数名
でアクセスできます。
標準モジュール(Module1)内であれば
debug.print Module1.変数名
■ユーザーフォームの変数にアクセスする時
ユーザーフォーム(UserForm1)内であれば
debug.print UserForm1.変数名
でアクセスできます。
ただし、UnLoadや×印で閉じてしまうとメモリ上から消えてしまい変数にアクセスすることはできません。
そのため、×印を押した際に閉じるのではなく、非表示にしてあげる必要があります。
以上を踏まえると以下のようになります。
標準モジュール:Module1
Sub SampleCode()
MsgBox "変数abcの値は:" & UserForm1.hogehoge
UserForm1.Show
MsgBox "変数abcの値は:" & UserForm1.hogehoge
End '全ての処理が終わったらEndでPublic宣言の変数をリセットする
End Sub
ユーザーフォーム:UserForm1
Public hogehoge As String
Private Sub CommandButton1_Click()
hogehoge = "abc" 'UserForm1の変数に保存
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Me.Hide 'メモリから消えてしまわないよう非表示にする
Cancel = True 'デフォルトの挙動(メモリから消える)をキャンセルする
End Sub
No.1
- 回答日時:
それらの変数等には、スコープという概念が存在します。
これは簡単に言うと、それらの変数等のオブジェクトが、どの位置まで使用出来るかという事を示します。
説明が下手なので申し訳ありませんが、以下のサイト等を参考にしてみては如何でしょうか。
参照URL : http://homepage1.nifty.com/rucio/main/kiso/Scope …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 以下のVBAで該当文字列の前後に付与したい。 例 前に付与 abc ユーザーID 12345 後に付 3 2022/04/19 21:50
- Visual Basic(VBA) マクロについて教えてください。 4 2023/06/06 09:06
- Visual Basic(VBA) vba Sleep関数について教えてください 1 2023/01/18 10:18
- Excel(エクセル) エクセルのイベントVBAを複数のシートで動かしたい 1 2022/12/07 16:55
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
このQ&Aを見た人はこんなQ&Aも見ています
-
見学に行くとしたら【天国】と【地獄】どっち?
みなさんは、一度だけ見学に行けるとしたら【天国】と【地獄】どちらに行きたいですか? 理由も聞きたいです。
-
【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
【お題】・忍者がやってるYouTubeが炎上してしまった理由
-
自分独自の健康法はある?
こうしていると調子がいい!みたいな自分独自の健康法、こだわりはありますか?
-
AIツールの活用方法を教えて
みなさんは普段どのような場面でAIツール(ChatGPTなど)を活用していますか?
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
ExcelのVBA。public変数の値が消える
Visual Basic(VBA)
-
エクセルVBAでシートモジュールでのパブリック変数
Excel(エクセル)
-
ブック名、シート名を他のモジュールからも参照可能にする方法
Access(アクセス)
-
-
4
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
5
private subモジュールを他のモジュールから呼び出して使う方法を教えてください(-.-)
Visual Basic(VBA)
-
6
Excel マクロ VBA プロシージャが大きすぎます のエラー対処方法
Visual Basic(VBA)
-
7
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
8
メッセージボックスに表示する文字を大きくしたい
Excel(エクセル)
-
9
コンボボックス内の文字サイズ変更
Excel(エクセル)
-
10
VBA モジュールで共通に使う変数の宣言方法
その他(Microsoft Office)
-
11
VBA 変数名に変数を使用したい。
Visual Basic(VBA)
-
12
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
13
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
14
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
15
エクセルVBAで5行目からオートフィルタモードに設定したいたい
Excel(エクセル)
-
16
vbaから他のアプリを終了
Visual Basic(VBA)
-
17
ユーザーフォームに入力したデータを保持する方法
Visual Basic(VBA)
-
18
Excel VBA のdebug(F8キー) がうまく動作しません(超初心者です)
Excel(エクセル)
-
19
VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます
Visual Basic(VBA)
-
20
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ユーザー定義関数に#NAME?が返...
-
Excel VBAでリンク切れをチェッ...
-
VBでグローバル変数を宣言するには
-
エクセルVBAでシートモジュール...
-
Excel VBA 『Call』で呼び出す...
-
VBAで別モジュールへの変数の受...
-
モジュールとクラスの違いって...
-
クラスモジュールについて
-
'Range'メソッドは失敗しました
-
VBのフォームモジュールと標準...
-
標準モジュールを削除したい。(...
-
グラフのX,Y座標を取得したい
-
モジュールの最大数はいくつな...
-
シートモジュールで使う変数を...
-
Excel VBAで、ユーザーフォーム...
-
Excel VBA 標準モジュールの整...
-
VB2005ーDataGridViewの選択さ...
-
VBAで旧字体を異字体に一括で変...
-
Perlで何日前か判断する計算式
-
エクセルVBA クラスモジュール...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBAで、ユーザーフォーム...
-
Excel VBAでリンク切れをチェッ...
-
vba userFormのSubを標準モジュ...
-
エクセルVBAでシートモジュール...
-
ユーザー定義関数に#NAME?が返...
-
モジュールの最大数はいくつな...
-
VBAで旧字体を異字体に一括で変...
-
VBでグローバル変数を宣言するには
-
VBAで別モジュールへの変数の受...
-
VBA This Workbookモジュール...
-
【vba】フォームに書いてあ...
-
モジュールとクラスの違いって...
-
SendKeysの使い方について
-
標準モジュールを削除したい。(...
-
エクセルVBA クラスモジュール...
-
Excel VBA 『Call』で呼び出す...
-
'Range'メソッドは失敗しました
-
グラフのX,Y座標を取得したい
-
Excel VBA 標準モジュール内で...
-
大量の標準モジュールを解放す...
おすすめ情報