質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

1回答

1849閲覧

OLEDragDrop で、ドロップしたファイルが開かれてしまう

tabbycat

総合スコア10

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2022/05/16 05:47

編集2022/05/16 06:21

はじめての質問です。
過不足あるかも知れず恐縮ですが、よろしくお願いしますm(_ _)m

前提

Excel VBA で、Listview を使って DragDrop で csvファイルのパスを取得するマクロを組んでいます。
Listview にファイルをドロップすると、こちらで定義した OLEDragDrop の処理終了後に、ドロップした csvファイルがExcelで開かれてしまいます。

実現したいこと

いちいち手で閉じればいいと言えばそうなのですが、可能であれば開かないようにしたいです。

該当のソースコード

ThisWorkBookのマクロ

VBA

1Private Sub Workbook_Open() 2 3 UserForm1.Show vbModeless 4 5End Sub

UserForm1のマクロ(処理順に並べ替えています)

VBA

1Private Sub UserForm_Initialize() 2 Application.Visible = False 3 lblProgress.Width = 0 4End Sub 5 6Private Sub LV1_OLEDragDrop(Data As MSComctlLib.DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single) 7 8 Dim i As Long 9 Dim ii As Long 10 Dim FPath As String 11 Dim ret As String 12 Dim ShtNM As String 13 Dim ShtCnt As Long 14 15 'ドロップされたファイルパスの取得 16 For i = 1 To Data.Files.Count 17 FPath = Data.Files(i) 18 Next 19 20 '拡張子確認 21 ii = InStr(FPath, ".") 22 23 If Mid(FPath, ii + 1, Len(FPath) - ii) <> "csv" Then 24 ret = MsgBox("CSVファイルのみ選択可能です。", vbOKOnly, "ファイル選択エラー") 25 Else 26 '取込用シート作成 27 ShtCnt = ThisWorkbook.Sheets("count").Cells(1, 1).Value 28 29 ThisWorkbook.Sheets("雛形").Copy After:=Sheets(Sheets.Count) 30 ShtNM = Format(Now(), "yy年m月") & "_" & ShtCnt 31 ActiveSheet.Name = ShtNM 32 33 If setCSVdata(FPath) Then 34 35 Application.Visible = True 36 Me.Hide 37 Sheets(ShtNM).PrintOut Preview:=True 38 39 ret = MsgBox("シートを保存しますか?", vbYesNo, "保存確認") 40 41 Application.DisplayAlerts = False 42 43 If ret = vbNo Then 44 ActiveSheet.Delete 45 End If 46 47 Application.DisplayAlerts = True 48 End If 49 End If 50 51 Unload Me 52 53End Sub 54 55Function setCSVdata(pass As String) As Boolean 56 57 setCSVdata = False 58 59 ' 指定されたファイルからCSVデータを読込み、転記する処理です。 60 ' Line Input で読込み処理します。 61 ' この処理中はCSVファイルは開かないので、コードは省略。 62 63 setCSVdata = True 64 65End Function 66 67Private Sub UserForm_Terminate() 68 Application.Visible = True 69End Sub

試したこと

1.
ListView のプロパティを確認しました。

・OLEDragMode …0 - ccOLEDragManual
・OLEDropMode …0 - ccOLEDropManual

通常はこれで、イベントに記述した以外の動作はしないという認識でいます。

2.
CSVファイルが開いてしまうタイミングを調査しました。ユーザーフォームのTerminate後でした(以降は何の処理も記述していません)。

どちらかというと根本的な Excel の仕様の問題かと思い、「VBA ListView ファイルが開いてしまう」などで検索しましたが、求める情報が見つけられませんでした。

補足情報(FW/ツールのバージョンなど)

Excel 2019(32bit, ver.2204) / Windows 10(64bit)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bebebe_

2022/05/17 08:13

Private Sub LV1_OLEDragDrop(Data As MSComctlLib.DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single) Unload Me End Sub でも同様の症状になるのでモードレスのフォームのドロップダウンイベントにUnloadがあるとなりそうですね。
guest

回答1

0

自己解決

回答が遅れてすみません!
理由は分かりませんが、仰るとおり モードレスで、Unload 記述を削除したらCSVが開かれずに済んだので、さしあたりそれで動かしています。
ありがとうございます。

投稿2022/05/24 05:05

tabbycat

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問