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

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

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

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

VBA

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

マクロ

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

解決済

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

tabbycat
tabbycat

総合スコア10

CSV

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

VBA

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

マクロ

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

1回答

0評価

0クリップ

139閲覧

投稿2022/05/16 05:47

編集2022/05/24 14:05

はじめての質問です。
過不足あるかも知れず恐縮ですが、よろしくお願いします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)

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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があるとなりそうですね。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

CSV

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

VBA

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

マクロ

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