Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Excel 2013)
excel VBA 複数行選択ドラッグ&ドロップ
投稿日時: 21/04/14 08:38:15
投稿者: masawa
メールを送信

VBAのプログラムに関して全くの初心者です。excelのvbaでユーザーフォームを作成し、2つのリストボックスを配置し、ListBox1のデータを複数個選択してListBox2へドラッグ&ドロップしたいのですが出来ません。
どなたか教えて頂ければ幸いです。よろしくお願い致します。

回答
投稿日時: 21/04/14 09:33:17
投稿者: WinArrow
投稿者のウェブサイトに移動

>できない
ではなく、
記述したコードに問題があるかもしれません。
そのコードを掲示してみましょう

回答
投稿日時: 21/04/14 12:06:16
投稿者: simple

こちらの過去ログが参考になるのでは?
 
「ListBoxのデータの移動について」
http://web.archive.org/web/20210128021756/https://www.moug.net/faq/viewtopic.php?t=80127
米国の有名なアーカイブサイトです。(怪しいサイトではありません。)

投稿日時: 21/04/14 13:53:56
投稿者: masawa
メールを送信

WinArrow さんの引用:
>できない
ではなく、
記述したコードに問題があるかもしれません。
そのコードを掲示してみましょう

ご連絡ありがとうございます。
ある程度できましたが改行部分で空白ができてしまいます。
1個ずつドラッグ&ドロップすると1行空白部できます。
複数選択したデータ間は空白部はできません。
 
Private Sub ListBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  Dim D As DataObject
  Dim ii As Long
  Dim ListDate As String
 
    For ii = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(ii) Then
            ListDate = ListDate & ListBox1.List(ii) & vbCr
        End If
    Next ii
 
    If Button <> 1 Then Exit Sub
    Set D = New DataObject
    D.SetText ListDate
    D.StartDrag
End Sub
 
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 As String, sa() As String, n As Integer, w As Integer
 
 If Action = fmActionDragDrop Then
    ss = Data.GetText
    sa = Split(ss, vbCr)
    w = UBound(sa)
    For n = 0 To w
      ListBox2.AddItem sa(n)
    Next
 End If
 Data.Clear
End Sub
 

投稿日時: 21/04/14 13:55:07
投稿者: masawa
メールを送信

simple さんの引用:
こちらの過去ログが参考になるのでは?
 
「ListBoxのデータの移動について」
http://web.archive.org/web/20210128021756/https://www.moug.net/faq/viewtopic.php?t=80127
米国の有名なアーカイブサイトです。(怪しいサイトではありません。)

ご連絡ありがとうございました。
参考にしてみます。

回答
投稿日時: 21/04/14 19:12:53
投稿者: simple

追記です。
 
即効テクニック「ドラッグ&ドロップ−ListBox⇒ListBox」
https://www.moug.net/tech/exvba/0150045.html
を使用しているのであれば、
こちらへの提示にあたって、
ListBox2_BeforeDragOver
は省略しないで頂きたい。これが無いと動作しないはずです。
 
1. 複数個のアイテムを対象にするのであれば、ListBox1オブジェクトの
  MultiSelectプロパティを 1 にしてください。
 
2.>改行部分で空白ができてしまいます。
 これは、

 Set D = New DataObject
 D.SetText Left(ListDate, Len(ListDate) - 1)  
とすれば直ります。

回答
投稿日時: 21/04/15 08:27:07
投稿者: simple

1.の指摘は余計でしたね。それは実行されているはずですね。

投稿日時: 21/04/15 08:27:14
投稿者: masawa
メールを送信

simple さんの引用:
追記です。
 
即効テクニック「ドラッグ&ドロップ−ListBox⇒ListBox」
https://www.moug.net/tech/exvba/0150045.html
を使用しているのであれば、
こちらへの提示にあたって、
ListBox2_BeforeDragOver
は省略しないで頂きたい。これが無いと動作しないはずです。
 
1. 複数個のアイテムを対象にするのであれば、ListBox1オブジェクトの
  MultiSelectプロパティを 1 にしてください。
 
2.>改行部分で空白ができてしまいます。
 これは、
 Set D = New DataObject
 D.SetText Left(ListDate, Len(ListDate) - 1)  
とすれば直ります。

おはようございます。
有難うございました。
ご指摘のListBox2_BeforeDragOverは、Cancel = Trueと書いてありました。
空白部は、おっしゃるように記述したらうまくいきました。
お世話になりました。

回答
投稿日時: 21/04/15 16:54:06
投稿者: simple

解決であればスレッドを閉じて下さい。

投稿日時: 21/04/15 16:58:19
投稿者: masawa
メールを送信

お世話になりました。