[[20051001114255]] 『コンボボックスの選択』(yo) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『コンボボックスの選択』(yo)

 いつもお世話になっています。
 VBA勉強中です。
 どなたか教えて下さい。
 Main、0504、0506、0507、累計、累計平均と言った感じで月別シートとが存在します。
 Mainシートのコマンドボタンから実行し、フォームを表示させて
 そこにあるコンボボックスから月を指定して、指定された月のシートに対して
 プログラムを実行させたいのですが、
 コマンドボタンで月が選択できません。
 どの様にしたら良いでしょうか?
 また、選択された月のシートにプログラムを実行させたい場合、どの様に繋げたら良いでしょうか?

 ================================
 コマンドボタンをクリックして、月リストを選択表示

 Private Sub CommandButton1_Click()

    Call frm_年月指定.Show

 End Sub

 ==================================

 年月指定フォームに以下のプログラム

 Private Sub cmb_年月_DropButtonClick()
    Dim bRet    As Boolean
    Dim iShn    As Integer
    Dim cmb_年月    As ComboBox

    bRet = シート名一覧(iShn)

    With frm_年月指定.cmb_年月
        .Clear
        .List = ActiveSheet.Range("a1:a" & iShn).Value
    End With

 End Sub

 Private Function シート名一覧(iShn As Integer)

 Dim Wsn As String
 Dim i As Integer

    Application.ScreenUpdating = False
    If Sheets.Count = 1 Then Exit Function
        Range("A1").Select
        Range(Selection, Selection.End(xlDown)).ClearContents
            For i = 2 To Sheets.Count - 2
                Wsn = Sheets(i).Name
                Sheets(1).Cells(i - 1, 1).Value = Wsn
            Next
        Range("A1").Select
        Selection.End(xlDown).Select
        iShn = Selection.Row

    Application.ScreenUpdating = True

 End Function

 ======================================
 選択した月シートに以下のプログラムを実行させたいです。

 Private Sub CommandButton2_Click()

    Dim vData   As Variant
    Dim lEdata  As Long

    Columns("D:D").Select
    Selection.Insert Shift:=xlToRight

    Range("C5").Select
    lEdata = Selection.End(xlDown).Row

    Range("D5:D" & lEdata).Select
    For Each vData In Selection
        With vData

            .Formula = "=" & .Offset(, -3).MergeArea.Cells(1).Address & _
                "&SUBSTITUTE(SUBSTITUTE(" & .Offset(, -2).MergeArea.Cells(1).Address & _
                ","" "",""""),"" "","""")&" & .Offset(, -1).Address
        End With
    Next

    Columns("D:D").Select
    Selection.EntireColumn.Hidden = True

 End Sub

 よろしくお願いします。


 えっと・・・、全体の流れをつかんでいませんが、
 Private Sub CommandButton2_Click()のコードの中で
 CommboBoxで選んだシート名を指定してやれば良いのじゃないかな・・・。

 Dim MySh As String    '変数の宣言
 MySh = CommboBox1.Value '変数に代入

 Columns("D:D").Select  ←親のシートが指定されていないので、

 WorkSheets(MySh).Columns("D:D").Select ←シート名を指定させる(他の箇所も同様に)
 ただ、これだと他のシートのセルはSelect出来ないので、直接列を挿入させる。

 WorkSheets(MySh).Columns("D:D").Insert Shift:=xlToRight '←このように。

 (川野鮎太郎)


 川野様、ご回答を頂きながら手がつけられずすっかりそのままになってしまいました。
 すいません。
 上記のご回答で実行する前に問題が生じています。
 コンボボックスに
 .List = ActiveSheet.Range("a1:a" & iShn).Value
 で追加した年月が、選択できません。
 具体的に言うと、0504、0505・・・とリスト表示されるのですが、
 実行したい月、例えば0505をクリックしても
 選択できないのです。
 まず、これを選択するにはどうしたら良いでしょうか?

 Private Sub cmb_年月_DropButtonClick()の中でブレークポイントを
設定して実行してみるとわかりますが、
ドロップボタンを押したときにリストをクリア
 > リスト設定 
 > ドロップダウンリスト表示
続いて、リスト選択(この瞬間は選択項目が表示されている)
 > DropButtonClickイベントが再度発生してリストクリア
 > リストがクリアされるので選択したListIndexもクリア
 > リスト設定 
 > リストはあるが、結果的に空白表示
となっています。コンボボックスへリスト設定するタイミングを
再考してください。ドロップダウンボタンをクリックするたびに
シート一覧の再設定の必要があるのでしょうか。
シート追加、シート名変更などの操作がありますか?
なければ、UserForm_Initializeイベントで一回だけ行ったほうが
よさそうですが。
(みやほりん)


 またまたご無沙汰となってしまいました。
 みやほりんさん、ご回答有難うございました。
 ブレークポイントを設定して実行してみた所、良く分かりました。
 また、年月の設定はご教授頂いたとおり、UserForm_Initializeイベント
 にしました。
 その結果、思っていた通りに実行する事ができました。
 どうも有り難うございました。
 またよろしくお願いします。

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.