| 
    
     |  | [2577]のコードを利用して、Comboboxが3つのユーザーフォームをつくりました。 Combobox1の値を変えると、下記エラーが出ます。なぜでしょうか。
 (cmb.AddItem ""のコードを追加すると、一応エラーなしで動きます。
 Combobox1で空白を選ぶと、動作がおかしくなるので、cmb.AddItem ""のコードは無しでやりたいです。)
 原因がわかれば、また、もっと良い対策があれば教えて下さい。
 
 
 シート1の構造
 A        B        C        D    E
 1
 2  頭字    学校名        学科        D,E列はVBAのを作業エリア
 3  み        三島高校    電気
 4  み        三島高校    機械
 5  み        三島高校    建築
 6  み        美鈴高校    普通
 7  み        美鈴高校    国際
 8  さ        坂本高校    普通
 9  さ        坂本高校    電気
 10 さ        坂本高校    機械
 11 さ        坂本高校    建築
 12 さ        坂女子高    普通
 13 さ        坂女子高    理数
 14 さ        坂女子高    衛生看護
 
 Userform1のコードで、
 
 cmb.AddItem ""
 cmb.ListIndex = 0  '<=====  cmb.AddItem "" がないとエラー
 
 「 ListIndexプロパティを設定できません。プロパティの値が不正です。」
 というメッセージが出ます。
 
 Userform1のコード
 Sub set_combo_item(cmb As MSForms.ComboBox, func_str As String)
 'cmb データをセットするコンボボックス
 'func_str データ抽出のための関数式
 Dim rng As Range
 Dim rng2 As Range
 Dim rng3 As Range
 sw = 3
 If cmb = ComboBox3 Then sw = 4
 With Sheet1
 Set rng = .Range("a3", .Range("a65536").End(xlUp))
 End With
 rng.Offset(0, sw).Formula = func_str
 rng.Offset(0, sw) = rng.Offset(0, sw).Value
 Set rng2 = rng.Offset(0, sw).SpecialCells(xlCellTypeConstants)
 cmb.Clear
 For Each rng3 In rng2
 If rng3 <> 0 Then cmb.AddItem rng3.Value
 Next
 'cmb.AddItem ""
 cmb.ListIndex = 0  '<=====  cmb.AddItem "" がないとエラー
 Set rng = Nothing
 Set rng2 = Nothing
 Set rng3 = Nothing
 Sheet1.Range("D1") = cmb.Text
 End Sub
 
 Private Sub UserForm_Initialize()
 Dim func_str As String
 func_str = "=IF(COUNTIF($A$3:A3,A3)>1,0,A3)"
 Call set_combo_item(ComboBox1, func_str)
 End Sub
 
 Private Sub ComboBox1_Change()
 Dim func_str As String
 Sheet1.Range("D1") = ComboBox1.Text
 func_str = "=IF($A3=$D$1,IF(COUNTIF($B$3:B3,B3)>1,0,B3),0)"
 Call set_combo_item(ComboBox2, func_str)
 End Sub
 
 Private Sub ComboBox2_Change()
 Dim func_str As String
 Sheet1.Range("E1") = ComboBox2.Text
 func_str = "=IF($B3=$E$1,$C3,0)"
 Call set_combo_item(ComboBox3, func_str)
 End Sub
 
 |  |