Excel VBA質問箱 IV

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

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


3151 / 13644 ツリー ←次へ | 前へ→

【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 お礼[未読]

【63886】ComboBox_Changeについて
質問  stamp  - 09/12/25(金) 19:42 -

引用なし
パスワード
   初めて投稿させて頂きます。

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

ネットで検索しながら、色々と試してみたのですが、
どうしてもTextBoxへ反映させる事ができませんでした。

どなたか、御親切な方に教えて頂きたく。

Private Sub UserForm_Initialize()
  Dim cmb(5) As ComboBox
  
  Set cmb(0) = ComboBox1
  Set cmb(1) = ComboBox2
  Set cmb(2) = ComboBox3
  Set cmb(3) = ComboBox4
  Set cmb(4) = ComboBox5
For i = 0 To 4
  With cmb(i)
  .AddItem "AAA"
  .AddItem "BBB"
  End With
Next
End Sub
- - - - - - - - - - - - - - - - - - - - - - - -
Private Sub ComboBox1_Change()
  Me.Controls("TextBox27").Value = ComboBox1
End Sub

Private Sub ComboBox2_Change()
  Me.Controls("TextBox28").Value = ComboBox2
End Sub



Private Sub ComboBox5_Change()
  Me.Controls("TextBox31").Value = ComboBox5
End Sub

【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

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

引用なし
パスワード
   あと、
シートの特定のセルを ComboBoxと 対応するTextBox から
共通して参照する、という手もあります。
コード的には 非常にシンプルなものになります。
先ほどとは別のユーザーフォームを作ってお試しください。

'----------------------------------------------- UserForm
Option Explicit

Private Sub UserForm_Initialize()
  Dim i As Long
  Dim j As Long
  Dim ss As String
  For i = 1 To 5
    ss = "Sheet1!AA" & i
    With Me("ComboBox" & i)
      .List = Split("AAA BBB CCC DDD EEE")
      .ControlSource = ss '参照するセル 【要変更】
    End With
    j = i + 26
    Me("TextBox" & j).ControlSource = ss
  Next
End Sub

'---------
コードは簡素化されましたが、
この方法は Changeイベントでセルが更新されるのでなく、
AfterUpdateイベントで機能するので、TextBoxの文字が
更新されるのは、ComboBoxで選択をしてどこか他のコントロールに
移動するときです。
これがちょっと、イマイチです。

【63890】Re:ComboBox_Changeについて
お礼  stamp  - 09/12/26(土) 9:17 -

引用なし
パスワード
   ▼kanabun さま:

クラス、及び、ControlSourceを使った方法のご提示、
ありがとう御座います!

投稿以前に「擬似からの脱却(1〜3までですが)」などを、
確認しながら色々とやっていて、本質問部分以外のコードは、
簡略化できたのですが、投稿させて頂いた部分だけが、
どうしてもできませんでしたので、悩んだ末に、
投稿させて頂いたしだいであります。

ありがとう御座いました!

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