新しく質問する

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

役に立った:0件
  • 質問者:taka1012
  • 投稿日時:2007/07/28 17:06
  • 困り度:困ってます

下記の2つのコードの意味について教えて下さい。
Private Sub CommandButton1_Click()
If ComboBox1 = "" Then
ComboBox1.SetFocus・・・・・1
Exit Sub
End If
Application.Run (ComboBox1.List(ComboBox1.ListIndex))・・・2
End Sub
1と2がわかりません。

Private Sub UserForm_Initialize()
TB = Array("マクロ1", "マクロ2", "マクロ3")
Me.ComboBox1.List = TB
End Sub
「Private Sub UserForm_Initialize()」と「Array」がわかりません。
よろしくお願いします。

この質問への回答は締め切られました。
このQ&Aは役に立ちましたか?(役に立った:0件)
  • 参考になった:0件
  • 回答者:redfox63
  • 回答日時:2007/07/29 10:50

どのように上手くいかないのかを具体的に説明しましょう
このコードだと ComboBox1で何も選択されていないとさいしょのIf文でComboBox1にフォーカスが設定されてイベントが終了になります
この点はご理解いただけますか?

どちらかのコンボで項目が選択されていたらマクロを実行したいということでしょうか
となると 最初のif文を見直さないといけないですね

  dim n1 as integer, n2 as intger
  ' コンボボックスの選択項目を取得
  n1 = ComboBox1.text
  n2 = ComboBox2.text
  if n1 = -1 and n2 = -1 then
   ' 両方とも未選択の場合
    comboBox1.Setfocus
    exit sub
  else
    if n1 <> -1 then
      ' ComboBox1が選択
      application.run Combobox2.list( n1 )
      if n2<>-1 then
        ' comboBox2も選択されていた場合
        application.run Combobox2.list( n2 )
      end if
    else
      ' ComboBox1が未選択の場合
      ' つまりComboBox2のみが選択
      application.run Combobox2.list( n2 )
    end if
  end if
といった具合になるっともいます

通報する

この回答へのお礼

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

  • 参考になった:0件

No.3ベストアンサー20pt

  • 回答者:redfox63
  • 回答日時:2007/07/28 21:56

> ComboBox2.List = TB2でコンボボックスに"マクロ4"、"マクロ5"、"マクロ6"を追加する
の部分は

Dim TB2
TB2 = Array("マクロ4","マクロ5","マクロ6")
ComboBox2.List = TB2
を UserForm_Initializeイベントに追加します

フォームに このマクロ起動用の新たなボタンを作成するか
既存のCommmandButton1を流用するかはご自身の判断になるかと思います

新規に作るのであれば CommandButton1_Clickとほぼ同様の記述になります
違うのは 検査対象が ComboBox2になる点です
Private Sub CommandButton2_Click()
  If ComboBox2 = "" Then
    ComboBox2.SetFocus
    Exit Sub
  End If
  Application.Run (ComboBox2.List(ComboBox2.ListIndex))
End Sub
といった具合でしょう

通報する

この回答への補足

redfox63様、度々のご回答ありがとうございます。
>既存のCommmandButton1を流用するかはご自身の判断になるかと思います
今回、既存のCommmandButton1を流用したく下記の通りコードを追加しましたがうまく反応しません。
どこが誤っているのでしょうか?
よろしくお願いします。

Private Sub CommandButton1_Click()
If ComboBox1 = "" Then
ComboBox1.SetFocus
Exit Sub
End If
Application.Run (ComboBox1.List(ComboBox1.ListIndex))
If ComboBox2 = "" Then
ComboBox2.SetFocus
Exit Sub
End If
Application.Run (ComboBox2.List(ComboBox2.ListIndex))
End Sub

  • 参考になった:0件

No.2ベストアンサー10pt

  • 回答者:imogasi
  • 回答日時:2007/07/28 20:01

これ実験するには、初心者には、相当難しいが、質問者は出来ているのですね。念のため解説と注意点を書きます。
エクセルVBAでやってます
(1)UserFoem1を挿入
(2)UserFoem1の上にテキストボクッスなど1つ以上張り付け
フォーカス移動を実験するため
(3)UserFoem1の上にコンボボックスを1つ張り付け
(4)UserFoem1の上にコマンドボタンを1つ張り付け
--
(5)標準モジュールに
Sub マクロ2()
MsgBox "マクロ2実行"
End Sub
などのようにマクロ○○に応じた,ダミーでも良いので、ルーチンを作る。採ったことが判るようにMsgBoxを入れる.

マクロ1", "マクロ2", "マクロ3"・・の数に応じて作る。
--
(A)ユザーフォームの実行をクリックすると
自動的に、フォームを表示する前に
Private Sub UserForm_Initialize()のルーチンを実行する
TB = Array("マクロ1", "マクロ2", "マクロ3")
Me.ComboBox1.List = TB
は配列にマクロ1, マクロ2, マクロ3を納めて
その順序で一括で、コンボのアイテムにこの順にAddする。
そしてフォームを表示する。
(B)フォームのコンボのアイテムを選択する。
例えば、マクロ2をクリックしておく。
(C)コマンドボタンをクリック
瞬間的にコンボにセットが無ければ、コンボにフォーカスが移る。
選択済みなので
Application.Run (ComboBox1.List(ComboBox1.ListIndex))
が実行される。
(D)その中身は
ComboBox1.ListIndexデ決まる。
マクロ2は2番目なので1がセットされ
コンボの選択肢の中身はComboBox1.List(X)
で表され、xは1なので2番目の、マクロ2という文字列が決まり
Application.Run マクロ2 が実行され
実行されるとマクロ2を実行が出る。
-ー標準モジュール
Sub マクロ2()
MsgBox "マクロ2実行"
End Sub
以下同類でマクロ1を作っておくこと。

ーーーフォームのイベントのコードに
Private Sub CommandButton1_Click()
If ComboBox1 = "" Then
ComboBox1.SetFocus
Exit Sub
End If
MsgBox ComboBox1.ListIndex
Application.Run (ComboBox1.List(ComboBox1.ListIndex))
End Sub
Private Sub UserForm_Initialize()
TB = Array("マクロ1", "マクロ2", "マクロ3")
Me.ComboBox1.List = TB
End Sub

通報する

  • 参考になった:0件
  • 回答者:redfox63
  • 回答日時:2007/07/28 17:26

1は コンボボックスが何も選択されていない状態の場合に
コンボボックスにフォーカスをセットするということです
フォーカスとは入力可能状態にするということ … ドロップダウンリストとか表示させて何かを選択させるため

2は コンボボックスで選択された名前のマクロを実行しなさい
という命令です

Arrayは配列をプログラムで作成するためのものです
この場合 TBが TB(1),TB(2),TB(3)といった具合に"マクロ1"、"マクロ2"、"マクロ3"が格納されます

ComboBox1.List = TBでコンボボックスに"マクロ1"、"マクロ2"、"マクロ3"が追加されます

UserForm_Initializeは ユーザーフォームを呼び出す際の初期設定を行うプロシージャです
これは決まりごとなので覚えるしかありません

VBAのエディタ VBEで分からない項目にカーソル(キャレット) |を置き
F1キーでヘルプを参照してみましょう

通報する

この回答への補足

ご回答ありがとうございます。
丁寧に解説していただいたので、良くわかりました。

恐れ入りますが下記の点についてもご教授いただければ幸いです。
上記コードの2の部分に以下を加えたいのです。
Application.Run (ComboBox2.List(ComboBox2.ListIndex))

また、ComboBox2は以下のようにしたいのです。
ComboBox2.List = TB2でコンボボックスに"マクロ4"、"マクロ5"、"マクロ6"を追加する。

よろしくお願いします。

  
このQ&Aは役に立ちましたか?(役に立った:0件)

このページのトップへ