VB6
ファイル/フォルダのアドレスを取得してファイル/フォルダの区別を
したいのですが、特定の物(サーバー内)がエラーしてしまいます。
リストへ"OLEDragDrop"した時に下記実行させています。
MsgBox Data.Files(1)
MsgBox GetAttr(Data.Files(1))
MsgBox Dir(Data.Files(1))
MsgBox Dir(Data.Files(1), vbDirectory)
エラーの対象 AとB & 問題無い C
A>ファイルの種類:Windows Server
A>アドレス:\\server
B>コンピューターの種類:Windows Server
B>アドレス:\\server\TestB
C>ファイルの種類:ファイルフォルダ
C>アドレス:\\St_server\TestB\TestC
Aは全てエラー
>実行時エラー'461':
>データの形式が一致しません。
Bはアドレスは取得出来て"Dir"でエラー (GetAttr = 16)
>実行時エラー'52':
>ファイル名または番号が不正です。
Bはアドレスを取得出来てるのでエラー処理で
なんとかなりそうなのですが、Aはアドレスすら取得出来ません。
Aのアドレスを取得するにはどうしたら良いでしょうか?
(サーバーは社内管理していて詳しくありません)
No.6ベストアンサー
- 回答日時:
私の方でも確認しました。
確かに、コンピュータ名をドロップした場合、Files プロパティにアクセスできないですね。
以下のコードを使えば、コンピュータ名は取得できました。
Private Declare Function RegisterClipboardFormat Lib "user32" Alias "RegisterClipboardFormatA" (ByVal lpString As String) As Long
Private Sub LI1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim CF_FILENAMEW As Long
Dim file As String
CF_FILENAMEW = RegisterClipboardFormat("FileNameW")
If CF_FILENAMEW > 32767 Then CF_FILENAMEW = CF_FILENAMEW - 65536 ' 16bit値に変換
If Data.GetFormat(CF_FILENAMEW) Then
file = Split(Data.GetData(CF_FILENAMEW), Chr(0))(0) ' 末尾の'\0'を削除
MsgBox file
End If
End Sub
回答有難う御座います。
"\\server"のパスを取得出来ました。
なるほど Clipboard を利用するんですね。コード詳細は後程確認してみます。
複数の場合は出来ないので"\\server"関連は一個単位にして
この方法でパスを取得します。(分類はフォルダ指定)
それ以外は"Data.Files.Count"と"Data.Files(1)"と"Dir"を使用し
ファイル/フォルダを区別します。
Exploreで開くも確認出来ました。
CreateObject("Shell.Application").Explore "\\server"
助かりました。
No.5
- 回答日時:
>あとはserverも複数有るため、VBへドロップ時にserverのパス名を取得する方法だけです
これが何を言われてるのか良く分からないのですが
エクスプローラから選択ファイルを自作アプリにドラッグ&ドロップしたい
(そしてその方法が分からない)ということでいいのでしょうか?
そうだとしたら以下URL参考になりませんか
http://www.atmarkit.co.jp/fdotnet/dotnettips/676 …
関連情報(上のURL含む)は
ファイル ドラッグ ドロップ アプリケーション VB
のキーワードで検索かければ出てきます
※ 初めに書いたように自分でVB触ってないので確認などは一切していません
(というか文法もちゃんと知りませんのでまともなアドバイスは出来ません)
ファイルフルパス名が分かれば1文字目の判断だけでドライブなのか
UNC名なのかの判断は出来るはずです
そうでない内容なのであれば実際にどのようにして何を行いたいのかを
もう少し詳しく書いていただかないと分かりません
足 度々の回答有難う御座います。
多数の質問で分かりにくくなってすみません。
エクスプローラーからVBへドロップした時に"\\Server" という文字(パス名)を得たいのです。
私の中でその唯一の方法が Data.Files(1) だったのですが、"\\Server"はエラーしてしまいます。
他にもファイルに対してのドラッグ/ドロップ方法は有るのですが
ファイルで無いため、このパスをVBでは取得出来ない??のでしょうか。
"\\Server"などサーバー類は手動でパスを入れるしかない?
------------------------------------------------------------------------
If Data.GetFormat(vbCFFiles) Then
'(ドロップファイルをWindows エクスプローラのファイル リストかどうかの判定)
で調べると、[\\Server]はFalse が返ってきます。他はTrue
[\\Server]は通常のファイル/フォルダ操作では出来ないみたいです。
No.4
- 回答日時:
>BとCですが、Bをプロパティ表示すると全般にCP名・CP種類・ドメイン
>と表示され、編集出来ない様管理されています。
この辺りはファイルかフォルダかという話もありますが
アクセス権限がどのようになっているのかも関係しきてるのではないかと思います
試したわけではありませんので以下そのつもりで
WindowsのUNC(\\IPアドレス\**\**)形式で
ファイル名指定されている場合
A)がPC名=IPに該当するのは既に書いたとうり
B)の場合 必ずフォルダになるはずです
※ ここがきちんと確認したわけではないところですが
Windowsの共有設定の関係上IP名に続く
名称(単純に言えば \TestB にあたる部分)
がファイル名になるという設定は出来ないはずです
(必ず \\IP\共有フォルダ名 となるはず)
c)の場合はフォルダ名・ファイル名の場合も混在します
BとCの区別は \ の数を調べれば判断付くはずです
環境限定なのであればの話ですが上記条件で決め打ちで
作ってしまってもいいのではないかと思います(という勝手な意見)
OS上から普通にショートカット作ってもB の時はちょっと
特殊な作り方されてるようですので(リンク先の変更不可)
この辺り(ネットワークの共有フォルダ名)は
レジストリの情報見てた様な気もしますが未確認です
回答有難う御座います。
サーバー内のフォルダがなんとなく理解出来てきました。
>(必ず \\IP\共有フォルダ名 となるはず)
なるほどと思ったのですが、プリンタが2つ\\server\配下にありました。
まあこの辺は無視するしかないと思いますが・・。
\ の数でPC名判断は使わしてもらいます。
あとはserverも複数有るため、VBへドロップ時にserverのパス名を取得
する方法だけです。肝心なここが出来ないとこの一週間が無駄になってしまいます・・。
No.3
- 回答日時:
> 実際にはPCが有る無しではなくショートカット用アドレスを取得したいです。
「アドレスを取得」というのがちょっと意味不明ですが、
ショートカットにしたりExplorerに使うのは、引数の「Data.Files(1)」そのままでOKでしょう。
> ドロップした物のアドレスを保管してショートカットで開くソフトを検討しています。
> (ファイル/フォルダ区別はフォルダの場合エクスプローラで開くため)
この場合、知りたいのは、引数が「ファイルなのかフォルダなのか」どちらなのか、ということですよね。
コンピュータ名は、「\\コンピュータ名」という形になってますから、
Left(Data.Files(1),2)="\\" And InStr(Mid(Data.Files(1),3),"\")=0
で判定できます。
それなら、コンピュータ名の時は、ファイルフォルダの判別処理は行わないようにし、開く時はフォルダと同様にエクスプローラで開くようにすればいいんじゃないでしょうか。
この回答への補足
すみません、マイコンピュータにはパスがありませんでした。
\\server\ などの サーバーのPC名でした。
serverのパス ⇒ \\server [Data.Files(1)] = ×
通常のパス ⇒ \\server\TestB [Data.Files(1)] = ○
回答有難う御座います。
すみません用語が不理解でした「アドレスを取得」= パス
「Data.Files(1)」でパスを取得出来ると思ったのですが、
PC名(マイコンピュータなど)をドロップするとData.Files(1)でエラーしてしまいます。
この時点で
>Left(Data.Files(1),2)="\\" And InStr(Mid(Data.Files(1),3),"\")=0
が利用出来ません。
Data.Files(1)の使い方がおかしいのでしょうか?
Private Sub LI1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
MsgBox Data.Files(1)
End Sub
No.2
- 回答日時:
ちょっと追記
A)は#1に書いたようにPC名に該当します
> B>コンピューターの種類:Windows Server
> C>ファイルの種類:ファイルフォルダ
とかかれてますがこれが間違い
両方ともファイルもしくはフォルダとなります
回答有難う御座います。
なんとなく見えてきた気がします。
PC名にファイルやフォルダ操作は出来ないって事ですね。
BとCですが、Bをプロパティ表示すると全般にCP名・CP種類・ドメイン
と表示され、編集出来ない様管理されています。
B(フォーム名:TestA-Serverのプロパティ)
C(フォーム名:TestBのプロパティ)
でもアドレスは表示されるので確かにフォルダですね。
実際にはPCが有る無しではなくショートカット用アドレスを取得したいです。
ドロップした物のアドレスを保管してショートカットで開くソフトを検討しています。
(ファイル/フォルダ区別はフォルダの場合エクスプローラで開くため)
No.1
- 回答日時:
VBについては使ってないので知りません
A)はファイルやフォルダではなくてPC名(IPアドレス)に該当するものになります
(ファイル操作とは根本的な扱いが違います)
そのPCが存在しているかを知りたいのでしょうか?
PING投げて応答が返ってくるか(但しPing応答許可していない可能性もあると思います)
位しかないのではないでしょうか
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルVBA(実行時エラー438)の対処法を教えてもらえないでしょうか 3 2023/04/22 13:43
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Outlook(アウトルック) 【 Windows 10 】アドレス帳に正しくインポートを完了させたい。 3 2023/04/23 13:41
- Visual Basic(VBA) VBA★PDFをPDFアプリで印刷しようと思っていますが上手くゆきません 1 2022/06/06 22:04
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- PHP どうして送信されないのでしょうか? 1 2022/12/09 05:23
- Visual Basic(VBA) 【VBA】印刷マクロのループ処理が反映されません 3 2022/08/09 02:15
- Excel(エクセル) 【マクロ】エラーが発生⇒実行時エラー58既に同名のファイルが存在 5 2022/08/31 10:03
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBSでごみ箱に捨てたファイルの...
-
属性の値に特殊文字が大量にあ...
-
DellのHPが開かない!!
-
急にXMLパースエラーが表示され...
-
ファイルopenエラーになってし...
-
ファイルをアップロードするとh...
-
エクセルVBA インデックスが有...
-
コマンドプロンプトを使ってIE...
-
localhostで表示されない
-
勝手にdatファイルになるのです...
-
録音アプリのPCM録音で4時間録...
-
WordでURLをクリックしてそのペ...
-
ギガファイル便って女の人のエ...
-
PDFに精通した方に質問。JPEGフ...
-
ハイパーリンクを新規ウィンド...
-
PDFファイルをホームページ...
-
ホームページビルダーで画像を...
-
ファイルをコピーしてる時にス...
-
HPビルダーで、HPB_Recycled...
-
サーバーに転送したファイルが0...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
急にXMLパースエラーが表示され...
-
コンパイル時のエラーについて...
-
VB6 使用中ファイルの確認
-
ホームページビルダーの【×】マ...
-
ファイルopenエラーになってし...
-
ワードがなかなか閉じないです
-
リンカ 致命的エラーについて
-
属性の値に特殊文字が大量にあ...
-
thunderbardでエラーが出ます。
-
Excelのハイパーリンクがエラー...
-
local by flywheelについて
-
VBAを記述したEXCELファイルを...
-
フォルダの削除について
-
エクセルVBA インデックスが有...
-
韓国に送った添付ファイルexcel...
-
電子書籍epub変換について
-
セッション削除でエラー
-
ファイルをアップロードするとh...
-
Borland C++ Compilerのエラー...
-
WinMx使用中に・・・「ファイル...
おすすめ情報