[[20180412123828]] 『VBAのShell関数のパス名の長さについて』(なお) ページの最後に飛ぶ

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

 

『VBAのShell関数のパス名の長さについて』(なお)

EXCELL VBAの中にshell関数を使っているのですが

 ここの中に入れるパス名を変数にしていろいろ入れるのですが
長いパス名に限りエラーになるように思われます。
  最大のパス名の長さの制限はあるのでしょうか。

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


そのものずばりの情報を見つけられませんでした。 OSの制限が適用されるのであれば、255文字ですかね。 でも、それを含むフルパスをブックとして開こうとした場合、ブックのファイル名に使えるフルパス制限の方が短い(218文字?)ので、パス1つで255文字なんて、使えなかったりしませんか?

長いパスへの対応ですが、途中までのパスをドライブマッピングしておき、ドライブ名指定で利用することができると思います。 パス名を短く変更することが許されない場合、お試しください。
(???) 2018/04/12(木) 16:00


 ???さんのコメント見てて思い出したんですが、依然仕事上で同じような問題が発生したため、
 その時に問題解決に使用したマッピングと解除のコードを載せておきます。
 Sub TEST1()
    Dim Ltr As String
    Ltr = FreeDrive
    Call MapNWDrive(Ltr, "\\長いパス")
    MsgBox Ltr & " に割り当てました。"
 End Sub

 Sub TEST2()
    Call RmNWDrive("M")
 End Sub

 Private Function FreeDrive() As String
    '空きのドライブレターを検索
    Dim Idx
    Dim DvLet
    Dim FSO
    Set FSO = CreateObject("Scripting.FileSystemObject")
        For Idx = 3 To 26
            DvLet = Chr(64 + Idx)
            If Not FSO.DriveExists(DvLet) Then
                FreeDrive = DvLet
                Set FSO = Nothing
                Exit Function
            End If
        Next
    Set FSO = Nothing
    Call FreeDrive
 End Function

 Private Sub MapNWDrive(DriveLtr As String, Path As String)
    '仮想・NWドライブの割り当て
    Dim WSHNet
    Dim WSH
    If Left(Path, 1) = "\" Then
        Set WSHNet = CreateObject("WScript.Network")
        WSHNet.MapNetworkDrive DriveLtr & ":", Path
        DriveFlg = False
    Else
        Set WSH = CreateObject("WScript.Shell")
        WSH.Run "%ComSpec% /c subst " & DriveLtr & ": " & "" & Path & "", 0, True
        DriveFlg = True
    End If
 End Sub

 Private Sub RmNWDrive(DriveLtr As String)
    'NWドライブの解除
    Dim WSHNet
    Dim WSH
    On Error Resume Next
    Set WSHNet = CreateObject("WScript.Network")
    WSHNet.RemoveNetworkDrive DriveLtr & ":", True
    Set WSH = CreateObject("WScript.Shell")
    WSH.Run "subst /d " & DriveLtr & ":", 0, True
    On Error GoTo 0
 End Sub

 TEST1がパスをマッピングするサンプル、TEST2が解除するサンプルです。
(ろっくん) 2018/04/12(木) 16:45

ろっくんさんのコードがマッピングの参考になりますね。

私は、ローカルのときは同じように SUBSTコマンドを使い、ネットワークのときは NET USEコマンドを使って、どちらも WScript.Shell によるコマンドプロンプト実行を使ってました。 WScript.Network は知りませんでした。 頭がDOS寄りだと実感。
(net use x: パス名 とかでマップ、net use x: /delete /yes とかで解除)
(???) 2018/04/12(木) 18:11


 話の流れをよくつかんでませんが、参考HPです。

 VBAで長いパスが扱えないと思ったら
http://knjname.hateblo.jp/entry/2015/01/27/220219
(カリーニン) 2018/04/12(木) 19:13

 おや、先に書かれた

 タイトルの一部、「Shell関数のパス名の長さ」で検索したら、

 VBAで長いパスが扱えないと思ったら - knjnameのブログ
 ttp://knjname.hateblo.jp/entry/2015/01/27/220219

 が1ページ目に出るのですが

 その下の関連する検索キーワードにも、そのままの「excel vba 長い パス」てのがあったりしますし

 ついでに「最大のパス名の長さの制限」で検索したら

 Windowsのファイル名最大文字数は?
 ttp://salaryman-life.blogspot.jp/2013/06/windows.html

 がトップに来ますし
 パス長260文字はWindowsの制限みたいですね

(2u) 2018/04/12(木) 19:22


コメント返信:

[ 一覧(最新更新順) ]


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