|
▼Abyss さん:
Abyssさん
いつも、素晴らしいコードを見せていただき、ありがとうございます。
同じクラス処理をしても(当然ですが)コードの中身は、小学生低学年と大人の差が歴然ですね!
へぇ!とか、なるほど!とか、そういったところも少しはありますが、ほとんどが
わからないけど、動かすと、ちゃんと参照ができてる! というものです。
でも、これをラッパーのように使って、とにかく使えるんだと、そういった部品を、今回アップされた
コートの中から、いくつも、作っておけそうです。
で、私がアップしたクラス、小学生レベルなんですが、Abyssさんのコードでやっておられる
各処理のタイミングもパクらせていただき、Abysさんのコードをと同じように
・転記先では リストトップにもっていかず、そのままの位置で、挿入されたということを
明確にするために選択状態に。
・転記元の選択状態のリセットは、リストからデータを削除するのと同じタイミングで。
(考えてみれば、これはあたりまえでしたね)
という部分のみ、コード修正。(myLB_BeforeDropOrPaste をリバイスです)
Private Sub myLB_BeforeDropOrPaste(ByVal Cancel As MSForms.ReturnBoolean, _
ByVal Action As MSForms.fmAction, ByVal Data As MSForms.DataObject, _
ByVal X As Single, ByVal Y As Single, ByVal Effect As MSForms.ReturnEffect, _
ByVal Shift As Integer)
Dim ss
Dim i As Long
Dim NewIndex As Long
'同一リストボックス内でのドロップは無効
If Not myLB Is LB Then
'ドラッグ時のみドラッグされたデータをリスト項目に追加
If Action = fmActionDragDrop Then
ss = Split(Data.GetText(), vbTab)
With myLB
NewIndex = .TopIndex + Y \ getRowHeight
.AddItem ss(0), NewIndex
For i = 1 To UBound(ss)
.List(NewIndex, i) = ss(i)
Next
.ListIndex = NewIndex
End With
End If
LB.RemoveItem IDX '移動元リストボックスから削除
LB.ListIndex = -1 '移動元の選択状態をリセット
End If
Data.Clear 'DataObjectのデータクリア
End Sub
|
|