• ベストアンサー

【VBA】フォームタブ開いた時に動くマクロ

マクロ自体はわかっているのですが フォームのタブを開いた時に動くようにしたいのですが どうしたらいいのでしょうか?

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

  • ベストアンサー
  • mesihuro
  • ベストアンサー率34% (23/66)
回答No.5

MultiPage1と2で >同じマクロを使う場合 >MultiPage1の時には >ComboBox1 >2の時には2になるように作れますか? マクロがどういうものか分からないけど、マクロ側でコントロールを判断できるようにしたいってことでいいのかな? 引数の話も分からないだろうから、直接的な回答ではなくサンプルを提供するよ。 Private Sub MultiPage1_Change() Dim cmdindex As Integer cmdindex = MultiPage1.Value★1 If cmdindex = 0 Then Call DispText(TextBox1, "aaa")★3 Else Call DispText(TextBox2, "bbb") End If End Sub Private Sub DispText(ctrl As Control, str As String)★2 ctrl.Text = str★4 End Sub 上記のサンプルはフォームにマルチページのコントロールを配置して、Page1にTextBox1を、Page2にTextBox2を配置してあると考えてね これを動かすとマルチページをPage1と2で切り替えたときに、テキストボックスに値を入れるようになってる ★でマークした箇所の詳細を説明するよ ★1 今マルチページが何ページなのか(Page1なのか2)を取得したいときは、Valueで取得できる これを使って「nページの時はこの処理をする」ってことができる。 今回は変数に取得してるけど、If文の条件に直接書いても平気だよ If MultiPage1.Value = 0 Then 注意としてはPage1が0だよ ★2 ここでいよいよ引数の登場。 引数も変数宣言と同じように、名前と型を指定してあげる。 複数指定する場合はサンプルのようにカンマで区切る 今回はまず対象コントロールをその都度変えたいから、Controlって型の引数を一つ そしてそのコントロールに表示させる文字列を格納するための引数としてString型を1つ用意してある。 ★3 関数を呼び出す際に()の中に渡してあげたい値を設定する。 その時のルールとしては、型が一致していること。 DispText()は一つ目がControl型、二つ目がString型だから、TextBox*というコントロールを第1引数に、そして表示させたい文字列を第2引数に指定しているよ ★4 ここのctrlは今回の例でいえばTextBox*と同じものと考えてね ここが今回のキーになるかな。 コンボボックスの場合はどうなるのか良く考えてね。

mougmoug
質問者

お礼

丁寧にありがとうございます。

mougmoug
質問者

補足

Sub 区分() If MultiPage1.Value = 0 Then COMBX ="ComboBox1" ElseIf MultiPage1.Value = 1 Then COMBX = "ComboBox7" End If COMBX.AddItem ws.Cells(i, 10).Value  ココでオブジェクトが必要とエラーがでます。 End Sub 現在こんな風になっています。 オブジェクトエラーがでます。 あと引数って設定必要ですか? しなかったらどんな不具合が出ますか? 昔は、処理が遅くなると聞いていた程度なのです。

その他の回答 (4)

  • mesihuro
  • ベストアンサー率34% (23/66)
回答No.4

>オブジェクト名は「Page2」となっています。 >デフォルトのままだと思います。 >TabStrip1というのがないのですよね・・・。 落ち着いて状況を整理してみよう Pageと出てきた時点で、今君が使っているコントロールはマルチページってコントロールであることは確定。 ツールボックス見てもらえれば分かると思うけど、タブストリップはまた別のコントロールだよ。 そしてオブジェクト名がPage2って出てるみたいだけど、その状態ってコントロールが斜めの線で囲われてる(選択)と思う。 その状態でカーソルをその線の上に置くと、上下左右の矢印に変わると思う。 変わったところでもう1回クリックしてオブジェクト名を確認してごらん。 変更してないなら多分MultiPage***って出てくると思うよ。

mougmoug
質問者

お礼

出来ました!

mougmoug
質問者

補足

MultiPage1と2で 同じマクロを使う場合 MultiPage1の時には ComboBox1 2の時には2になるように作れますか?

  • mesihuro
  • ベストアンサー率34% (23/66)
回答No.3

>TabStrip1は、使っているタブがTabStrip1なのか2なのかもわからなかったです。 それはあり得ないよ。 画面の左にプロパティ一覧があるはずだよ。 君が言っているタブというコントロールを選択すれば、プロパティのところに必ずオブジェクト名が出てる。 そしてそのコントロールをダブルクリックすれば、必ず何かのイベントが発生するような関数が勝手に作られるはずだよ。

mougmoug
質問者

お礼

またまたご回答ありがとうございます

mougmoug
質問者

補足

オブジェクト名は「Page2」となっています。 デフォルトのままだと思います。 TabStrip1というのがないのですよね・・・。

  • mesihuro
  • ベストアンサー率34% (23/66)
回答No.2

Private Sub MultiPage1_Change() End Sub とか Private Sub TabStrip1_Change() End Sub のこと?

mougmoug
質問者

お礼

1つのフォームを2タブで切り替えて運用している状況です。

mougmoug
質問者

補足

どちらも フォームのタブを変えてもマクロが動かないようです。 TabStrip1は、使っているタブがTabStrip1なのか2なのかもわからなかったです。

  • coohle
  • ベストアンサー率28% (2/7)
回答No.1

初めまして。 フォームを開いた際に動くマクロとして Private Sub Form_Load() 'ここにマクロを入力 End Sub で、どうでしょうか。

mougmoug
質問者

お礼

ご返答ありがとうございます!

mougmoug
質問者

補足

フォームの別タブを開いた場合はどうですか? タブが複数ある場合に初期タブではないところを 開いた場合に使いたいのです

関連するQ&A

専門家に質問してみよう