|
[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
|
|