[[20140809152838]] 『worksheetのformにフォルダをdragdropでファイル磨x(itomic) ページの最後に飛ぶ

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

 

『worksheetのformにフォルダをdragdropでファイル名取得』(itomic)

wroksheetに貼り付けた、Microsoft Listview Controlに、エクスプローラから該当フォルダをdragdropしてフォルダ以下のファイルパスを取得したいのですが。

ネットで調べ下記のコードを該当シートのモジュールに貼り付けてみたのですが、ステップイン(F8)は全く無反応で、実行(F5)でもマクロのリストに表示されません。
(下記コードはやりたいこととはずれていますが、dragdropの反応を確認する為)

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
 With Me
  AppActivate Me.Caption
  .ListView1.ListItems.Clear
  If Data.Files.Count < 1 Then Exit Sub
  For i = 1 To Data.Files.Count
   If InStrRev(Data.Files(i), "xls") > 0 Then
    Workbooks.Open (Data.Files(i))
   Else
    MsgBox "Excelの標準ファイルではありません。", vbCritical
   End If
  Next i
 End With
 End Sub

詳しくは忘れてしまったのですが...エクセル2003だったか2007で作動していたものが2013で実行したら動かないという話から、スタートした話なのですがそれが関係しているのでしょうか?
もうひとつ気になるのが、dragdropを調べているときに、Microsoft Listview Control6.0(SP4)を使用すると記載されているページが多くあったのですが、私の環境では Microsoft Listview Control6.0 なのですが(SP4ではない)、関係あるのでしょうか?

よろしくお願いします。

< 使用 Excel:Excel2013、使用 OS:Windows7 >


 Windows7、Excel2013、Microsoft Listview Control6.0 の環境で
 上記のコードで動きましたが(もちろんオブジェクト名は異なりますが)、
 オブジェクトをダブルクリックしたところで、VBE のイベント選択(下のサイトの2、4
 のステップ)の部分にコードを書いても動かないでしょうか。
http://excelvba.pc-users.net/fol4/4_5.html
(Mook) 2014/08/10(日) 18:12

 ListViewコントロールのOleDropmodeというプロパティは、1(ccOLEDropManual)に設定されていますか?

 これ、既定値が0なので、ご自分で設定しなければ ドロップ操作が拾えませんよ!!

(ichinose@明日、晴れるかなあ) 2014/08/12(火) 08:49


 あら、そうなんですか?
 何もいじらないで動いたのですけれど、なぜかなぁ・・・。
 環境によって異なるのでしょうか。
(Mook) 2014/08/12(火) 09:19

 Excel2010 Win7で確認しました。

 シートに貼り付けた場合、ユーザーフォームでの場合、共に
 OleDropmodeというプロパティが、1(ccOLEDropManual)に設定されていないと
 OLEDragDropイベントが発生しませんでした。

 尚、itomicさんが提示されたコードで OleDropmodeというプロパティが、0でも

 Excel本体にExcelブックがドロップされたと解釈して、対象ブックは、開きます。
 しかし、コードの制御を受けていないので拡張子がtxtでもxlsmでもcsvでも開いてしまいます。

 私は、以前どなたかのご質問でこのListViewコントロールを使ったドラッグ&ドロップの操作を
 拾う投稿があった際に試してみた程度(その時は ユーザーフォームでした)で仕事では使ったことがないのですが、今回試してみて気になったのは、シートに貼り付けた場合、
 ListViewコントロールのオブジェクト名の既定名がListView41と命名されることです
 (ユーザーフォームでは、ListView1と命名されるのに・・・)。

 いづれもSP4とは、記述されていません。

 気が付いたことを記述しました。

(ichinose@明日、晴れるかなあ) 2014/08/13(水) 09:08


関連して、どうか教えて下さい。

Excel上のListViewにデジカメ写真ファイルをフォルダからドラッグ&ドロップしてシートに貼り付けることができています。さらに応用して、Outlookのメールの添付写真を直接ドラッグ&ドロップしてみたのですが、
「Data.Files.Count」を含む行が黄色くなって、ダイアログのデバッグボタンを押すと、
「実行時エラー 461
Specified format doesn't match for of data」
というメッセージが表示されてしまいます。

通常のフォルダからドロップされた写真だけでなく、業務で使用するメール(当方の場合Outlook)に添付された写真も同様に貼り付け処理できるようにしたいのですが、どうしたら可能でしょうか?

現在出来ているのは、下記のサイトの「回答No.5」のコードをそのまま使っています。
http://oshiete.goo.ne.jp/qa/7167712.html
よろしくお願いします。
(pyon-yon) 2015/06/28(日) 07:30


 一旦添付ファイルを保存してから保存したものをドラッグ&ドロップではだめですか?

http://outlookvba.blogspot.jp/2011/11/step4.html

 なお、質問は他人のスレッドに書き込むのではなく自分でスレッドを立ち下げるようにしましょう。
 そして、関係あるスレッドはリンクを張るようにしましょう。
(カリーニン) 2015/06/28(日) 08:03

カリーニン様
質問者です。欠礼して申し訳ありませんでした。
サンプルをご提示いただきありがとうございました。
今回の意図は、開いているメールからそのままD&Dできれば、フォルダへの保存行程無しで
記録写真ドキュメントを作りたいというものです。(保存自体はOutlookの特定のフォルダに
保存されているので改めて保存しなくてもいいと思いました。)
なので、ドロップされたものがOutLookからならData.Files.Countのブロックとは別なブロックを
通るようにして処理できればと思うのですが、まだ力量がなくて実現できません。
(pyon-yon) 2015/06/28(日) 11:06

 再掲します。

 >なお、質問は他人のスレッドに書き込むのではなく自分でスレッドを立ち下げるようにしましょう。
 >そして、関係あるスレッドはリンクを張るようにしましょう。
(カリーニン) 2015/06/28(日) 23:38

 エラーが出るのは、No.5の方のレスの

 >対応していないファイルをD&Dしたりするとエラーになりますがあしからず。

 のとおりだと思います。
 「ごみ箱」や「コンピュータ」のアイコンをListViewにドラッグ&ドロップした
 場合と同じく、見た目はファイルやフォルダに見えるけど、内部的にはそうでない、
 ということなのだと思います。

 これを無理やりListViewで受け付けさせる方法はわかりません。
 Outlookの添付ファイルは、いったんフォルダ等に保存してエクセルに挿入する、
 ワード上にドラッグ&ドロップし、更にワードからエクセル上にドラッグ&ドロップ
 する、などの方法でエクセルに取り込むことができます。

 Outlookから直接エクセルにドラッグ&ドロップしてエクセルに取り込む、という
 方法はあるのかもしれませんが、今まで見たことがありません。

 なぜOutlookから直接エクセルにドラッグ&ドロップしてエクセルに取り込むことに
 拘るのか理由がわかりません。
(カリーニン) 2015/06/29(月) 01:02

コメント返信:

[ 一覧(最新更新順) ]


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