Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


61388 / 76738 ←次へ | 前へ→

【19970】Combobox1の値を変えると、エラー
質問  kobasan  - 04/11/21(日) 11:45 -

引用なし
パスワード
   [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

1 hits

【19970】Combobox1の値を変えると、エラー kobasan 04/11/21(日) 11:45 質問
【19975】Re:Combobox1の値を変えると、エラー Hirofumi 04/11/21(日) 14:21 回答
【19976】Re:Combobox1の値を変えると、エラー kobasan 04/11/21(日) 15:58 お礼
【19978】Re:Combobox1の値を変えると、エラー Hirofumi 04/11/21(日) 21:29 回答
【19979】Re:Combobox1の値を変えると、エラー kobasan 04/11/21(日) 22:44 お礼

61388 / 76738 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free