|
>"品名書込"は、Module1,Class1に書いても呼び出すことが出来なかったので
mickeypapaさん 今日は。
クラスモジュールをRaiseイベント処理に対応させたものです。
これでユーザフォーム内でも、標準モジュール内でも、"品名書込"のコードをつくることができます。
若干のコード修正が必要かもしれません。
★★ Class1 クラスモジュールのコード
Private WithEvents MyCtrl As MSForms.ListBox
Private MyIndex As Long
Private MyCaller As Object
Public Property Let Item(NewCtrl As MSForms.ListBox)
Set MyCtrl = NewCtrl
End Property
Public Property Let Index(NewIndex As Long)
MyIndex = NewIndex
End Property
Public Property Let Caller(NewCaller As Object)
Set MyCaller = NewCaller
End Property
Private Sub MyCtrl_Click()
'マウスのワンクリック用。有効にするときは、下の ' を消して下さい。
'Call MyCaller.lstBoxRaiseClick(MyIndex, MyCtrl)
End Sub
Private Sub MyCtrl_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
'マウスのダブルクリック用
Call MyCaller.lstBoxRaiseClick(MyIndex, MyCtrl)
End Sub
Private Sub MyCtrl_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'キー入力用
Call MyCaller.lstBoxRaiseClick(MyIndex, MyCtrl)
End Sub
★★フォームモジュールのコード
Private lstbbox(1 To 11) As New Class1
Private Sub UserForm_Initialize()
Dim i As Long
''' ↓Newを付けずに定義した時に必要
'''Set lstbbox = New Class1
For i = 1 To 11
With lstbbox(i)
.Item = Me.Controls("ListBox" & i)
.Index = i
.Caller = Me
End With
Next i
End Sub
Private Sub UserFom_Terminate()
Erase lstbbox
End Sub
Public Sub lstBoxRaiseClick(ByVal Idx As Long, Ctrl As MSForms.ListBox)
Dim i As Long
Dim myStr As String
With Ctrl
For i = 0 To .ListCount - 1
If .Selected(i) Then myStr = myStr & .List(i, 0)
Next
End With
'品名書込
MsgBox myStr & " = " & Ctrl.Value '品名書込のコードに置き換えて下さい。
'品名書込のコードは少し修正が必要かもしれません。
End Sub
|
|