投稿時間:2005/12/09(Fri) 11:31 投稿者名:ダンボ
URL :
タイトル:DataObjectを使ったDrag&Drop
ども。Excel VBAからOutlook2000 VBAに手を広げ始めたダンボです。 外部仕様:lstALL,lstTO,lstCCと3つのリストボックスがあり、 ・lstALLからlstTO又はlstCCにドラッグ&ドロップした場合:lstTO又はlstCCにlstALLの該当データ を 複写する。 ・lstTO又はlstCCからlstALLにドラッグ&ドロップした場合:lstTO又はlstCCの該当データを削除す る。 ・lstTOからlstCCにドラッグ&ドロップした場合:lstTOの該当データをlstCCに移動する。 ということを考えています。そのうちlstBCCも拡張するかもしれません。
DataObjectの利用が初めてなので教えていただきたいのですが、 1.With New MSForms.DataObjectでどんどんインスタンスを作って行っては、やはりまずいのでしょう ね? Drop側でSet Data = Nothingを実行するべき? 2.「ドラッグ元がどこか」を知る方法は? DataObjectのプロパティってひとつも無い。 DataObjectのメソッドはClear/Getformat/GetfromClipboad/GetText/PutInClipboard/SetText/ StartDrag とすると、lstAll_Clickで .SteText lstAll.Nameとでもして名前を伝えるようにするのかな? できれば、lstAllというコントロールそのものを渡したいところ。
(作りかけのコード) Private Sub lstAll_Click() With New MSForms.DataObject .StartDrag End With End Sub
Private Sub lstCC_BeforeDragOver(ByVal Cancel As MSForms.ReturnBoolean, ByVal Data As MSForms.DataObject, ByVal X As Single, ByVal Y As Single, ByVal DragState As MSForms. fmDragState, ByVal Effect As MSForms.ReturnEffect, ByVal Shift As Integer) Cancel.Value = True Effect.Value = fmDropEffectCopyOrMove End Sub
Private Sub lstCC_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) lstCC.AddItem lstAll.Value Effect.Value = fmDropEffectMove End Sub
|