はじめての質問です。
過不足あるかも知れず恐縮ですが、よろしくお願いしますm(_ _)m
前提
Excel VBA で、Listview を使って DragDrop で csvファイルのパスを取得するマクロを組んでいます。
Listview にファイルをドロップすると、こちらで定義した OLEDragDrop の処理終了後に、ドロップした csvファイルがExcelで開かれてしまいます。
実現したいこと
いちいち手で閉じればいいと言えばそうなのですが、可能であれば開かないようにしたいです。
該当のソースコード
ThisWorkBookのマクロ
VBA
Private Sub Workbook_Open() UserForm1.Show vbModeless End Sub
UserForm1のマクロ(処理順に並べ替えています)
VBA
Private Sub UserForm_Initialize() Application.Visible = False lblProgress.Width = 0 End Sub Private Sub LV1_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 ii As Long Dim FPath As String Dim ret As String Dim ShtNM As String Dim ShtCnt As Long 'ドロップされたファイルパスの取得 For i = 1 To Data.Files.Count FPath = Data.Files(i) Next '拡張子確認 ii = InStr(FPath, ".") If Mid(FPath, ii + 1, Len(FPath) - ii) <> "csv" Then ret = MsgBox("CSVファイルのみ選択可能です。", vbOKOnly, "ファイル選択エラー") Else '取込用シート作成 ShtCnt = ThisWorkbook.Sheets("count").Cells(1, 1).Value ThisWorkbook.Sheets("雛形").Copy After:=Sheets(Sheets.Count) ShtNM = Format(Now(), "yy年m月") & "_" & ShtCnt ActiveSheet.Name = ShtNM If setCSVdata(FPath) Then Application.Visible = True Me.Hide Sheets(ShtNM).PrintOut Preview:=True ret = MsgBox("シートを保存しますか?", vbYesNo, "保存確認") Application.DisplayAlerts = False If ret = vbNo Then ActiveSheet.Delete End If Application.DisplayAlerts = True End If End If Unload Me End Sub Function setCSVdata(pass As String) As Boolean setCSVdata = False ' 指定されたファイルからCSVデータを読込み、転記する処理です。 ' Line Input で読込み処理します。 ' この処理中はCSVファイルは開かないので、コードは省略。 setCSVdata = True End Function Private Sub UserForm_Terminate() Application.Visible = True End Sub
試したこと
1.
ListView のプロパティを確認しました。
・OLEDragMode …0 - ccOLEDragManual
・OLEDropMode …0 - ccOLEDropManual
通常はこれで、イベントに記述した以外の動作はしないという認識でいます。
2.
CSVファイルが開いてしまうタイミングを調査しました。ユーザーフォームのTerminate後でした(以降は何の処理も記述していません)。
どちらかというと根本的な Excel の仕様の問題かと思い、「VBA ListView ファイルが開いてしまう」などで検索しましたが、求める情報が見つけられませんでした。
補足情報(FW/ツールのバージョンなど)
Excel 2019(32bit, ver.2204) / Windows 10(64bit)
まだ回答がついていません
会員登録して回答してみよう