Excel VBA質問箱 IV

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

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


8106 / 76732 ←次へ | 前へ→

【74203】Re:Listbox間のドラッグアンドドロップ
発言  kanabun  - 13/4/28(日) 12:26 -

引用なし
パスワード
   あさにレスした
> 1. 1列目だけでなく、10列一括して移動したい。
のコードに、さらに
>2. ドロップした位置に挿入したい 1. コードに
を加えてみました。
ただし、いろいろ簡略化のために決め打ちしているところが
ありますので、適宜そちらの環境に修正してください。

a) ListBoxは ListBox1とListBox2 だけを使い、
 方向は ListBox1 でDrag開始して、 ListBox2 へのDropだけ
 に限定している。
b) ListBoxへのListのセットはシートのA〜Dの4列をセットしている

c) 一行の高さを変数TextHiに求めているが
>  TextHi = lngHeight * 72 / 96  'DPI 決め打ち
コメントにあるように、DPI を 96 に決め打ちしている。
 ここは APIを使って 96 を求めたほうがよい。
 また、ListBox1 と ListBox2 で使用しているFont は 同じと仮定。

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

Private TextHi As Long 'ListBox リストの一行の高さ(全ListBox共通)

'//ユーザフォーム初期化
Private Sub UserForm_Initialize()
  Dim acc As IAccessible
  Dim lngHeight As Long
   
  'ListBoxに初期リストのセット
  With ListBox1
    .List = Range("A1:D10").Value
    .ColumnCount = 4
    .ColumnWidths = "20;20;20;20"
  End With
  With ListBox2
    .List = Range("A11:D26").Value
    .ColumnCount = 4
    .ColumnWidths = "20;20;20;20"
  End With
  
  '一行の高さをListBox1から得る
  Set acc = ListBox1
  acc.accLocation 0&, 0&, 0&, lngHeight, 1&
  TextHi = lngHeight * 72 / 96  'DPI 決め打ち
  
End Sub


'//ListBox1 ドラッグ開始
'// マウス左ボタンのドラッグ時に対応
Private Sub ListBox1_MouseMove _
  (ByVal Button As Integer, ByVal Shift As Integer, _
  ByVal X As Single, ByVal Y As Single)
  If Button <> 1 Then Exit Sub
  'DataObjectに現在の選択アイテム値(複数列)格納
  Dim i As Long
  With ListBox1
    ReDim ss(.ColumnCount - 1)
    For i = 0 To .ColumnCount - 1
      ss(i) = .List(.ListIndex, i)
    Next
  End With
  With New DataObject
    .SetText Join(ss, vbTab)
    .StartDrag 'ドラッグ開始
  End With
End Sub


'//ListBox2にマウスが入った時のイベント
Private Sub ListBox2_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 = True でDrag&Drop継続
 Cancel = True

End Sub


'// ListBox2へのドロップ
Private Sub ListBox2_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 Action = fmActionDragDrop Then
    ss = Split(Data.GetText(), vbTab)
    With ListBox2
      NewIndex = .TopIndex + Y \ TextHi
      .AddItem ss(0), NewIndex
      For i = 1 To UBound(ss)
        .List(NewIndex, i) = ss(i)
      Next
      .TopIndex = NewIndex
    End With
  End If
  Data.Clear 'DataObjectのデータクリア

End Sub

0 hits

【74193】Listbox間のドラッグアンドドロップ 亜矢 13/4/27(土) 20:52 質問
【74195】Re:Listbox間のドラッグアンドドロップ kanabun 13/4/27(土) 21:29 発言
【74197】Re:Listbox間のドラッグアンドドロップ 亜矢 13/4/28(日) 4:30 質問
【74198】Re:Listbox間のドラッグアンドドロップ UO3 13/4/28(日) 8:25 発言
【74199】Re:Listbox間のドラッグアンドドロップ kanabun 13/4/28(日) 8:31 発言
【74202】Re:Listbox間のドラッグアンドドロップ 亜矢 13/4/28(日) 12:25 発言
【74203】Re:Listbox間のドラッグアンドドロップ kanabun 13/4/28(日) 12:26 発言
【74204】Re:Listbox間のドラッグアンドドロップ kanabun 13/4/28(日) 14:40 発言
【74205】Re:Listbox間のドラッグアンドドロップ 亜矢 13/4/28(日) 15:47 質問
【74206】Re:Listbox間のドラッグアンドドロップ kanabun 13/4/28(日) 17:02 発言
【74212】エウレカ! 13/4/29(月) 7:18 発言
【74209】Re:Listbox間のドラッグアンドドロップ UO3 13/4/28(日) 21:54 発言
【74210】Re:Listbox間のドラッグアンドドロップ UO3 13/4/28(日) 21:58 発言
【74217】Re:Listbox間のドラッグアンドドロップ Abyss 13/4/29(月) 23:17 発言
【74219】Re:Listbox間のドラッグアンドドロップ kanabun 13/4/30(火) 9:26 発言
【74224】Re:Listbox間のドラッグアンドドロップ UO3 13/4/30(火) 14:33 発言
【74221】Re:Listbox間のドラッグアンドドロップ kanabun 13/4/30(火) 13:03 発言
【74222】Re:Listbox間のドラッグアンドドロップ kanabun 13/4/30(火) 13:17 発言
【74223】Re:Listbox間のドラッグアンドドロップ 亜矢 13/4/30(火) 14:24 質問
【74225】Re:Listbox間のドラッグアンドドロップ UO3 13/4/30(火) 15:23 発言
【74226】Re:Listbox間のドラッグアンドドロップ Abyss 13/4/30(火) 18:23 発言
【74227】Re:Listbox間のドラッグアンドドロップ Abyss 13/4/30(火) 19:32 発言
【74232】Re:Listbox間のドラッグアンドドロップ 亜矢 13/5/1(水) 3:23 質問
【74233】Re:Listbox間のドラッグアンドドロップ kanabun 13/5/1(水) 9:01 発言
【74234】Re:Listbox間のドラッグアンドドロップ 亜矢 13/5/1(水) 9:09 発言
【74237】Re:Listbox間のドラッグアンドドロップ kanabun 13/5/1(水) 10:32 発言
【74236】Re:Listbox間のドラッグアンドドロップ UO3 13/5/1(水) 9:37 発言
【74238】Re:Listbox間のドラッグアンドドロップ Abyss 13/5/1(水) 12:11 発言
【74258】Re:Listbox間のドラッグアンドドロップ 亜矢 13/5/8(水) 19:56 お礼

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