前提・実現したいこと
Excelファイルを読み取り専用で開くためのvbsを作成しています。
下記vbsファイルをshell:sendToに格納し開きたいファイルを右クリック⇒送るで動作させることで
対象のExcelファイルを読み取り専用で開くものですがファイルパスが長すぎると正常に動作せず困っています。
どのようにすれば解決できるでしょうか。
発生している問題・エラーメッセージ
ファイルパスが長くなければ正常に動作することを確認できたのですが、
ファイルのフルパスが255文字を超えるような長いパス名を持ったファイルについては正常に動作しません。
エラーメッセージは特に出力されませんが、Excelファイルを開こうとしても
error
1拡張子は対象外のファイルです
と出力され意図しない動作となります。
長いパスだとvbsファイルに引数として渡している Wscript.Arguments がパスの途中で切れてしまっており、
正常に格納できていないことが原因のようです。
該当のソースコード
vbs
1'Option Explicit 2'On Error Resume Next 3 4Dim strFileName 'ファイルパスを格納 5Dim objApp 'オブジェクトを生成 6Dim objFileSys 'オブジェクトを生成(ファイルシステム) 7Dim strExtension '拡張子を格納 8Dim temp 9 10 11For i=0 to Wscript.Arguments.Count-1 12 'ファイルパスを取得 13 strFileName = Wscript.Arguments(i) 14 temp = Mid(Wscript.Arguments(i), InStrRev(Wscript.Arguments(i), "\") + 1) 15 16 'ファイルシステムを扱うオブジェクトを生成 17 Set objFileSys = CreateObject("Scripting.FileSystemObject") 18 19 '拡張子を取得 20 strExtension = objFileSys.GetExtensionName(strFileName) 21 '拡張子を表示 22 'Wscript.Echo strExtension 23 Wscript.Echo "filename:" & temp 24 Wscript.Echo "Len:" & Len(strFileName) 25 26 'ファイルの存在確認 27 If objFileSys.FileExists(strFileName) Then 28 Wscript.Echo "File OK" 29 End If 30 31 32 If (strExtension = "xls") OR (strExtension = "xlsx") OR (strExtension = "xlsm") OR _ 33 (strExtension = "XLS") OR (strExtension = "XLSX") OR (strExtension = "XLSM") then 34 'Excel関連処理 35 '起動 36 Set objApp = Wscript.CreateObject("Excel.Application") 37 '画面表示 38 objApp.Visible = True 39 '読み取り専用で開く(Excel) 40 Call objApp.Workbooks.Open(strFileName,,True) 41 42 Else 43 Wscript.Echo "拡張子 " & strExtension & " は対象外のファイルです" 44 End If 45 46 '終了処理 47 Set objWshNetwork = Nothing 48 Set objApp = Nothing 49Next 50 51Wscript.Quit 52
試したこと
ショートパス⇔ロングパスの変換を試してみましたがファイルパスが途中で切れてしまっているためか正常に動作しませんでした。
補足情報(FW/ツールのバージョンなど)
動作環境
OS:Windows 10 Pro(64bit)
回答5件
あなたの回答
tips
プレビュー