[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間: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

投稿時間:2005/12/10(Sat) 12:56
投稿者名:マヨ
Eメール:
URL :
タイトル:
Re: DataObjectを使ったDrag&Drop
おそらく見られたかとは思いますが、一応。Newをしているところは同じでこちらはクリップボード経由
でやろうとしてるみたいですね。
hhttp://www.moug.net/tech/exvba/0150045.htm

投稿時間:2005/12/12(Mon) 13:13
投稿者名:ダンボ
Eメール:
URL :
タイトル:
Re^2: DataObjectを使ったDrag&Drop
マヨさん、どうもありがとうございます。

> hhttp://www.moug.net/tech/exvba/0150045.htm
はい、見ておりました。2つの疑問については解決していませんね。

1.どんどんインスタンスを作って行っては、やはりまずい?
 DataObjectが値渡しなので「Drop側でSet Data = Nothingを実行」は無意味と思います。
2.「ドラッグ元がどこか」を知る方法は?
 DataObjectってどのくらい賢いオブジェクトなのかなぁ。