Excel VBA質問箱 IV

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

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


18294 / 76738 ←次へ | 前へ→

【63887】Re:ComboBox_Changeについて
発言  kanabun  - 09/12/25(金) 21:14 -

引用なし
パスワード
   ▼stamp さん:
はじめまして

>下記の、ComboBox_Change()の部分ですが、
>For Nextなどを使って、一つにまとめられないでしょうか?

クラスを使ってみますか?
VBEメニュ−から[挿入]-[クラスモジュール]で
クラスモジュールを追加し、モジュールの名前を
「ctrlComboBox」としてください。
クラスモジュールには以下のコードを貼り付けてください。
'------------------------------------------------
Option Explicit

Private WithEvents myComboBox As MSForms.ComboBox
Private myTextBox As MSForms.TextBox

Public Property Set ComboBox(arg As MSForms.ComboBox)
  Set myComboBox = arg
End Property
Public Property Set TextBox(arg As MSForms.TextBox)
  Set myTextBox = arg
End Property

Private Sub Class_Terminate()
  Set myTextBox = Nothing
  Set myComboBox = Nothing
End Sub

'やらせたい処理
Private Sub myComboBox_Change()
  myTextBox.Text = myComboBox.Value
End Sub


UserFormのほうは こんな感じです。
'------------------------------------------------
Option Explicit
Private Combos() As ctrlComboBox

Private Sub UserForm_Initialize()
  Dim i As Long
  Dim myList
  
  myList = Split("AAA BBB CCC DDD EEE") '適宜変更
  ReDim Combos(1 To 5)
  For i = 1 To 5
    Me("ComboBox" & i).List = myList
    Set Combos(i) = New ctrlComboBox
    With Combos(i)
      Set .ComboBox = Me("ComboBox" & i)
      Set .TextBox = Me("TextBox" & i + 26) 'Comboと TextBoxをリンク
    End With
  Next
End Sub

Private Sub UserForm_Terminate()
  Erase Combos
End Sub
0 hits

【63886】ComboBox_Changeについて stamp 09/12/25(金) 19:42 質問
【63887】Re:ComboBox_Changeについて kanabun 09/12/25(金) 21:14 発言
【63889】Re:ComboBox_Changeについて kanabun 09/12/25(金) 21:25 発言
【63890】Re:ComboBox_Changeについて stamp 09/12/26(土) 9:17 お礼

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