[[20230501124500]] 『ファイルをドラッグ&ドロップして 一括処理』(豊島) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ファイルをドラッグ&ドロップして 一括処理』(豊島)

現在、以下のマクロでターゲットフォルダーを選択して
フォルダ内のファイル名等を取得しています。

     |[A]  |[B]                              |[C]     |[D]       |[E]       
 [1] |[No.]|[ファイル名]                     |[サイズ]|[長さ]    |          
 [2] |    1|S02E01.Spoils.of.War.mkv         |484 MB  |0:21:54   |          
 [3] |    2|S02E02.Ruins.of.War.mkv          |558 MB  |0:25:28   |          
 [4] |    3|S02E03.The Solitary Clone.mkv    |609 MB  |0:27:46   |          
 [5] |    4|S02E04.Faster.mkv                |512 MB  |0:23:10   |          
 [6] |    5|S02E05.Entombed.mkv              |595 MB  |0:27:06   |          
 [7] |    6|S02E06.Tribe.mkv                 |572 MB  |0:25:58   |          
 [8] |    7|S02E07.The.Clone.Conspiracy.mkv  |578 MB  |0:26:25   |          
 [9] |    8|S02E08.Truth.and.Consequences.mkv|622 MB  |0:28:18   |          
 [10]|    9|S02E09.The.Crossing.mkv          |601 MB  |0:27:40   |          
 [11]|   10|S02E10.Retrieval.mkv             |596 MB  |0:27:07   |          
 [12]|   11|S02E11.Metamorphosis.mkv         |601 MB  |0:27:26   |          
 [13]|   12|S02E12.The Outpost.mkv           |630 MB  |0:28:56   |          
 [14]|   13|S02E13.Pabu.mkv                  |565 MB  |0:25:32   |          
 [15]|   14|S02E14.Tipping Point.mkv         |575 MB  |0:26:25   |          
 [16]|   15|S02E15.The Summit.mkv            |536 MB  |0:24:32   |          
 [17]|   16|S02E16.Plan.99.mkv               |554 MB  |0:25:27   |          
 [18]|     |  ------- 総計 -------           |8.98 GB |06: 59: 10|[hh:mm:ss]
 [19]|     |                                 |        |419: 10   |[mm:ss]   

これをセルにエクスプローラからファイル(又はフォルダー)をドラッグ&ドロップして
一括で処理出来ればと思っています。

参考になりそうな参考記事を見つけましたが
https://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_100_130.html

記事は、ユーザーフォーム利用していますが出来れば使用しないで処理したいです。

 Option Explicit

 Sub 動画時間取得()

    Dim Shell, Folder
    Dim fil
    Dim cnt As Long
    Dim i As Long
    Dim el As Long
    Set Shell = CreateObject("Shell.Application")

    Dim folderPath As Variant

    'ターゲットフォルダー選択
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Show
        folderPath = .SelectedItems(1)
    End With

    Set Folder = Shell.Namespace(folderPath)
    fil = Dir(folderPath & "\*.*")

    Worksheets("動画名").Columns("A:E").Clear

    Cells(1, 1) = "[No.]"
    Cells(1, 2) = "[ファイル名]"
    Cells(1, 3) = "[サイズ]"
    Cells(1, 4) = "[長さ]"

    cnt = 1

    Do While fil <> ""
        cnt = cnt + 1
        Cells(cnt, 1) = cnt - 1
        Cells(cnt, 2) = Folder.GetDetailsOf(Folder.ParseName(fil), 0) ' ファイル名
        Cells(cnt, 3) = Folder.GetDetailsOf(Folder.ParseName(fil), 1) ' サイズ

        Cells(cnt, 5) = Left(Cells(cnt, 3), InStr(Cells(cnt, 3), " ") - 1)

        Cells(cnt, 4) = Folder.GetDetailsOf(Folder.ParseName(fil), 27) ' 再生時間
        fil = Dir()
    Loop

    Dim rng1 As Range, rng2 As Range
    Dim tmb As Long

    el = Cells(Rows.Count, 1).End(xlUp).Row

    Set rng1 = Range("E2:E" & el)
    Set rng2 = Range("D2:D" & el)

    Cells(el + 1, "D") = Application.WorksheetFunction.Sum(rng2)
    tmb = Application.WorksheetFunction.Sum(rng1)

    If tmb > 1024 Then
        Cells(el + 1, "C") = WorksheetFunction.RoundUp((tmb / 1024), 2) & " GB"
    Else
        Cells(el + 1, "C") = tmb & " MB"
    End If

    Cells(el + 1, "C").NumberFormatLocal = "###,###,###"
    Cells(el + 1, "D").NumberFormatLocal = "hh: mm: ss"

    Cells(el + 2, "D").Value = Cells(el + 1, "D").Value
    Cells(el + 2, "D").NumberFormatLocal = "[mm]: ss"

    '仮計算用のE列をクリアー
    Worksheets("動画名").Columns("E:E").Clear

    Cells(el + 1, 2) = "    ------- 総計 -------    "
    Cells(el + 1, 5) = "[hh:mm:ss]"
    Cells(el + 2, 5) = "[mm:ss]"

    Set Folder = Nothing
    Set Shell = Nothing

    ActiveSheet.Cells.Columns.AutoFit

    Application.ScreenUpdating = True

 End Sub

< 使用 Excel:Excel2021、使用 OS:Windows11 >


見つけた?

ドロップ&ドラッグで添付ファイルを選択させる方法
投稿日時: 23/04/26 16:37:35
投稿者: HT
https://www.moug.net/faq/viewtopic.php?t=82207&sid=faa984b4951dc01640e42613d5b31b19
(嘘つきばっか) 2023/05/01(月) 13:07:30


Mougnの記事(投稿者: HT)は、私とは無関係です。
(豊島) 2023/05/01(月) 13:33:08

 エクセルブックやテキストファイルはシート上にドラッグ&ドロップ
 したらエクセル上でイベントが発生しますが、エクセル以外の
 ファイルやフォルダはエクセルは関知しない(感知もびない)ので
 ユーザーフォームを使わない限り無理だと思います。

 WindowsAPIを駆使したら出来ないこともないとは思いますが、
 私はそこまでのスキルがないので開設はできません。
(MK) 2023/05/01(月) 13:44:06

VBSにすればいいんでないかな
(ぶいぶい) 2023/05/01(月) 13:51:08

MKさん、アドバイス感謝します。

ユーザーフォームを使わない限り無理な相談ならば諦めます。

(豊島) 2023/05/01(月) 14:05:03


 ワークシート上にActiveXコントロールとして
 ListViewコントロールを配置したらユーザーフォーム
 を使わなくて済みます。
 お望みの形かどうかはわかりませんが。
(MK) 2023/05/01(月) 14:26:50

 これも過去の遺物化しつつありますが、
 ListView以外にWebBrowserコントロール
 もドラッグ&ドロップを受け付けます。
(MK) 2023/05/01(月) 14:30:57

 賢明な判断だと思います。
 WinAPIを使えばできるのかもしれませんが、難易度は相当高いものと推測します。
 正直申し上げて、文字フォントを太字にするといった質問をされるような方([[20230430163044]])が
 取り組む課題ではないように思います。
 それに、フォルダ配下の全ファイルだから、D&Dにこだわる必要も更々なく、今のままで機能的に十分でしょう。

(xyz) 2023/05/01(月) 15:18:38


>ワークシート上にActiveXコントロールとして
>ListViewコントロールを配置したらユーザーフォーム

興味があるので少し調べ始めました。

ワークシートにActiveこんとロールを挿入しようとしましたが
ActiveXコントロールの一覧中にListViewが無いので
コントロールの選択にある
「Microsoft ListView Control,version 6.0」を選択してOKをクリックしても
同ListViewコントロールが一覧表中に表示されません。

何か手順が間違っているようです。
(豊島) 2023/05/01(月) 15:44:44


 一覧には表示されません。

 が、シートに配置できる状態になっています。
 配置したい箇所をドラッグしたらドラッグ
 した範囲にListViewができるはずです。
(MK) 2023/05/01(月) 15:50:32

MKさん、何度もありがとうございます。

教えてもらった手順でListViewが配置されました。

あれこれ試していますが、xyzの書き込みにもありますが
参考になりそうなネット情報も検索してみましたが
事例も殆どなく
素人の付け焼き刃で何とかなるレベルではなさそうなので諦めました。

現状のマクロままで対処する事にしました。
(豊島) 2023/05/01(月) 17:12:49


その後、少し冷静になって付け焼き刃を再開しました。

LisyViewをユーザーフォームに配置して以下のコードでDrag&Dropできるようになりましたが
ユーザーフォームを呼び出した所でワークシート画面が消えてしまい
Drag&Dropでファイル名等が表示されてユーザーフォームを閉じるの右上の「X」を押しても
ワークシート画面は消えたままです。

ユーザーフォームを呼び出しても
最初のワークシート画面を表示したままにする方法を教えてください。

以下現在のコードです。

Public Sub Main_Form_Show()

    Excel.Application.Visible = False
    UserForm1.Show vbModeless
End Sub

'-----------------------------------------------------------------------------
Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem)

    With ListView1
        If .ListItems.Count < 1 Then Exit Sub
        ActiveCell = .SelectedItem.SubItems(1)
    End With
End Sub

Private Sub ListView1_OLEDragDrop(Data As MSComctlLib.DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single)

    '【変数】
    Dim i As Long           'カウンター
    Dim fileCount As Long   'ファイル数

    With ListView1

        '■既存ファイル名のクリア
        .ListItems.Clear

        '■ファイル数の取得
        fileCount = Data.Files.Count

        '■ドラッグ&ドロップしたファイル名・ファイルパスを順にリスト化
        For i = 1 To fileCount
            With .ListItems.Add
                .Text = Dir(Data.Files(i))    'ファイル名
                .SubItems(1) = Data.Files(i)  'ファイルパス
            End With
        Next i
    End With
End Sub

Private Sub UserForm_Initialize()

    With ListView1
        '■プロパティ設定
        .FullRowSelect = True           '行全体の選択
        .Gridlines = True               '行列グリッド線の表示
        .LabelEdit = lvwManual          'ラベル編集不可
        .OLEDropMode = ccOLEDropManual  'ファイルドロップ処理
        .View = lvwReport               '表示形式

        '■列見出しの名前・列幅の設定
        .ColumnHeaders.Add , "key1", "ファイル名", 300, lvwColumnLeft
        .ColumnHeaders.Add , "key2", "ファイルパス", 550, lvwColumnLeft
    End With

End Sub

(豊島) 2023/05/02(火) 11:47:11


自己解決しました。

以下で消してしまっていました。

Excel.Application.Visible = False
(豊島) 2023/05/02(火) 11:59:25


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.