🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

4回答

261閲覧

Userform1のソースコードでUserform2のボタンを押した時・・・というIF文を作りたいです。

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2019/09/10 09:06

編集2019/09/10 10:24

Userform1とUserform2があるとして、
Userform1のソース上(?処理などを記載しているマクロ)で、
Userform2の【yes】というボタンをクリックした時のIF文の処理を書きたいのですが、うまくいきません。

下記では違うのでしょうか?

If Form_UserForm2.yes_Click Then

追記
下記のようにも試しましたがうまくいきませんでした。

ユーザーフォーム1の記述

Dim userform2_hantei As Integer userform2_hantei = 0 Call userform2_hantei() If userform2_hantei = 1 Then 処理 ElseIf End Sub

ユーザーフォーム2の記述

Function userform2_hantei(userform2_hantei As Integer) If yes_Click Then userform2_hantei = 1 ElseIf End Function

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

VBAはイベントドリブンな言語です。
つまり何か事象が発生したときに定義してあるイベント関数が呼ばれることで動作を続けます。
事象とは「ボタンをクリックしたとき」「フォームを開いたとき」などのことです。
よってご提示のコードはそもそもの前提条件から外れた作りになっています。
またイベント関数はそれぞれのフォームごとにそのフォーム内で発生するイベントを定義します。
UserForm1でUserForm2のイベントを受け取ることはできません。
今回の質問は少々仕様が曖昧ですが、次のどちらかになると思われます。

  • UserForm1にあるボタンを押したら、UserForm2にあるボタンの処理を呼び出す
  • UserForm1の何かの処理中に、UserForm2にあるボタンの処理を呼び出す

いずれの場合でもUserForm2に外部フォームからも呼び出せる共通関数を作り、UserForm1から呼び出すことで実現できます。

UserForm2

VBA

1' ボタンクリック時の共通関数。Public にする 2Public Sub Button1_Click_Common() 3 ' 処理 4End Sub 5 6' ボタンクリックイベント 7Private Sub Button1_Click() 8 ' 共通関数を呼ぶ 9 Call Button_Click_Common() 10End Sub 11

UserForm1(ここで定義しているイベントは例です)

VBA

1' ボタンクリックイベント 2Private Sub Button1_Click() 3 ' 共通関数を呼ぶ 4 Call UserForm1.Button_Click_Common() 5End Sub 6 7' フォーム初期化イベント 8Private Sub UserForm_Initialize() 9 ' 共通関数を呼ぶ 10 Call UserForm1.Button_Click_Common() 11End Sub

投稿2019/09/11 00:16

ttyp03

総合スコア17000

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

とりあえず、Userform1とUserform2 の関係、処理の流れを説明してください。

例えば、下記のような感じで。

  1. Userform1 から Userform2 をモーダルで開く
  2. Userform2でYesボタンまたはNoボタンを押すとUserform2が閉じる
  3. Userform1で、YesボタンまたはNoボタンを押したかで処理を分ける

この場合はそれぞれのフォームはモーダルなのかモードレスなのか、は重要ですので、それも提示してください。それによってコードがまったく異なりますので。

追記

この回答への質問者さんのコメントの内容は、
上記で推測した仕様とほぼ同じようです。
その仕様に基づいたコード例を提示しておきます。

UserForm1

vba

1Option Explicit 2Public userform2_hantei As Integer 3 4Private Sub button_ok_Click() 5 userform2_hantei = 0 '初期化 6 UserForm2.Show 7 If userform2_hantei = 1 Then 8 'Yesボタンが押された時の処理 9 MsgBox "Yesボタンが押されました!" 10 Else 11 'それ以外の時の処理 12 End If 13End Sub

UserForm2

vba

1Private Sub Button_Yes_Click() 2 UserForm1.userform2_hantei = 1 3 Unload Me 4End Sub

UserForm1のPublic変数を介してどのボタンをクリックしたかを渡す

投稿2019/09/10 10:34

編集2019/09/11 00:25
hatena19

総合スコア34073

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/09/10 10:45

回答ありがとうございます。 無知で申し訳ございません。 Userform1とUserform2 の関係は、userform1にある実行ボタン(button_ok)を押すことでuserform2が出現するような処理になっています。 Userform2には、YesボタンとNoボタンがあり、 yesボタンを押すことで、Userform1に記述された処理が行われます。 また、userform2にあるyesボタンとNOボタンのどちらかを押すことで、userform2は閉じます。
退会済みユーザー

退会済みユーザー

2019/09/10 11:08

付け足しとしまして、userform1は、実行ボタンを押した後、一連の作業が終わったら、閉じるようにしています。
guest

0

Userform2のボタンのイベント処理はUserform2に書くものだと思います。それでは何か問題があるのでしょうか?

投稿2019/09/10 09:19

meg_

総合スコア10736

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Userform2のボタンを押したときにUserform1のなんかの変数をなんかするとかなんかの関数を呼び出すとかすればいいのではないかと。

投稿2019/09/10 09:11

y_waiwai

総合スコア88038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問