この人頭いいなと思ったエピソード

いつも大変お世話になっております。
やりたいこ

添付ファイルのように

コマンドボタン1 コマンド3  コマンドボタン2
リストボックス1        リストボックス2
と並んでいます。

 コマンドボタン1を押すとリストボックス1
 フォルダAのサブフォルダが一覧が表示されます。

 コマンドボタン2を押すとリストボックス2に
 フォルダBの中のファイルの一覧が表示されます。

★リストボックス2に表示されたファイルの複数選択して
リストボックス1に表示されたフォルダの中の入れたいのです。

一つ一つはできましたが、
複数のやり方を教えてくれませんでしょぅか

「リストボックス2に表示されたファイルの複」の質問画像

質問者からの補足コメント

  • 一度に投稿するとエラーになります。

    Private Sub CommandButton1_Click()
    Dim fso As Object
    Dim pathN As String
    Set fso = CreateObject("Scripting.FileSystemObject")
    Dim f
    ListBox1.Clear

    For Each f In fso.GetFolder("C:\Users\xxx\Desktop\移動先\").subfolders
    With ListBox1

    .AddItem ""
    .List(.ListCount - 1, 0) = f.Path
    End With
    Next f

    End Sub

      補足日時:2021/11/07 13:05
  • Private Sub CommandButton2_Click()
    Dim fso As Object,Dim pathN As String
    Set fso = CreateObject("Scripting.FileSystemObject")
    With ListBox2
    .Clear
    For Each f In fso.GetFolder("C:\Users\xxx\Desktop\移動元\").Files
    .ColumnCount = 2
    .ColumnWidths = "250;2"
    .Font.Size = 14
    .MultiSelect = fmMultiSelectMulti
    .AddItem ""
    .List(.ListCount - 1, 0) = f.Name
    .List(.ListCount - 1, 1) = f.Path
    Next f
    End With

      補足日時:2021/11/07 13:06
  • Private Sub CommandButton3_Click()
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")


    objlist1 = ListBox1.List(ListBox1.ListIndex, 0) & "\"

    objlist2 = ListBox2.List(ListBox2.ListIndex, 0)

    fso.movefile objlist2, objlist1

      補足日時:2021/11/07 13:07
  • 下記のコードを利用して
    Dim a() As String
    Dim b() As String
    Dim d As Long
    Dim Cnt, cnt1 As Long
    With Me.ListBox2
    For d = 0 To .ListCount - 1
    If .Selected(d) Then
    Cnt = Cnt + 1
    ReDim Preserve a(1 To Cnt)
    a(Cnt) = .List(d)
    End If
    Next
    If Cnt = 0 Then Exit Sub
    End With

      補足日時:2021/11/07 13:08

A 回答 (2件)

こんにちは



>下記のコードを利用して~
なぜ配列が出てくるのか意図がわかりません。

>一つ一つはできましたが、
>複数のやり方を教えてくれませんでしょぅか
一つができているのであるならば・・・
全体をループさせて、その中で「一つ一つ」の処理を繰り返すようになさればよいでしょう。

例えば、以下では複数選択の際に、順に選択された項目がメッセージボックスで表示されます。
表示する代わりに、「その一つの項目を処理する」ようにしておけば宜しいかと。

With Me.ListBox2
 For d = 0 To .ListCount - 1
  If .Selected(d) Then
   ' // 以下で表示する代わりに、行いたい処理を行えばよい
    MsgBox .List(d)
  End If
 Next
End With
    • good
    • 1
この回答へのお礼

いつもお世話になっております

ListBox2 = .List(d,1) ★変更しました。が
一つだけしか移動しませんでした

With Me.ListBox2
 For d = 0 To .ListCount - 1
  If .Selected(d) Then
   ' // 以下で表示する代わりに、行いたい処理を行えばよい
    ListBox2 = .List(d,1) ★変更しました。
  End If
 Next
End With

お礼日時:2021/11/07 15:03

>objlist1 = ListBox1.List(ListBox1.ListIndex, 0) & "\"


>objlist2 = ListBox2.List(ListBox2.ListIndex, 0)

この2つの変数の宣言も気になりますが、イミディエイトウィンドウでどのような結果が出るのか確認されました?
推測では後者はただのファイル名+拡張子であり、どのドライブのどのフォルダ階層に存在しているのかについては不明なのでは?と感じます。

あと最後の補足で配列に入れる意味が良くわかりません。

この仕様を作成するならVBAよりはVisualStudioのVB(.NET Framework)の方がやり易そうにも思えます。
    • good
    • 0
この回答へのお礼

すみませんでした。
もうすこし考えてみます。

お礼日時:2021/11/07 14:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報