- - PR -
VBSファイルのカレントディレクトリ取得に関して
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2009-02-25 01:55
VBSファイルに、ファイルをドラッグアンドドロップすると、VBSファイルのカレントディレクトリに存在する
EXCELファイルを起動しドラッグアンドドロップしたファイル名を渡す仕組みを作成しています。 ファイルをドラッグアンドドロップせずに、VBSファイルを起動すると、 下記でオブジェクトを作成したあと、 Set objWshShell = CreateObject("WScript.Shell") 「objWshShell.CurrentDirectory」で VBSファイルのカレントディレクトリが取得できるのですが、 ドラッグアンドドロップすると正常にカレントディレクトリが取得できません。 正常値 C:\Documents and Settings\USER\デスクトップ\カレント ドラッグアンドドロップ時 C:\Documents and Settings\USER 下記にコードを添付します。 ご教授をよろしくお願いいたします。 ■VBSファイル■■■■■■■■■■■■■■■■■■■■■■ Dim oApp Dim objWshShell 'Excelオブジェト作成 Set oApp = CreateObject("Excel.Application") 'WScript.Shellオブジェクト作成 Set objWshShell = CreateObject("WScript.Shell") oApp.Visible = True '不可視にする oApp.UserControl = True 'Excelファイルを開く oApp.Workbooks.Open objWshShell.CurrentDirectory & "\TEST.xls" 'ドラッグアンドドロップファイル名を取得する Set objArgs = WScript.Arguments dim filename filename = "" on error resume next filename = objArgs(0) 'エラーハンドリング if Err.number <> 0 Then if Err.number <> 9 Then Msgbox Err.Description & "[" & Err.Number & "]" End if Err.clear End if Set objArgs = Nothing Set objWshShell = Nothing 'ユーザーフォームを表示するマクロを呼ぶ oApp.RUN "SHOW_Form_Main" ,filename ■EXCELファイルマクロ■■■■■■■■■■■■■■■■■■ Public Sub SHOW_Form_Main(ByVal strFormName As String) Call MsgBox(strFormName) Form_Main.Show End Sub |
|
投稿日時: 2009-02-25 02:13
なぜそうなるかはわかりませんが、
代替案として、現在のパスの取り方をかえてみてはいかがでしょう (サンプル) Dim scriptPath scriptPath = WScript.ScriptFullName scriptPath = left(scriptPath,len(scriptPath)-len(WScript.ScriptName)) msgbox scriptPath msgbox WScript.ScriptFullName 最後に \ がついてしまうので、気をつけてください。 [ メッセージ編集済み 編集者: デューン 編集日時 2009-02-25 02:14 ] |
|
投稿日時: 2009-02-25 09:32
外してたらすまんけど
Excel側の「ツール→オプション」から、全般タブのカレントフォルダ名を確認してみたらどうでしょ? # ちとゆっくり読んでる暇がないのですみません。 |
|
投稿日時: 2009-02-25 15:16
ご回答ありがとうございます。
冬寂さん、Excel側の「ツール→オプション」から、 全般タブのカレントフォルダ名を確認したところ C:\Documents and Settings\USER\My Documents となっておりました。 一応、変更して実行してみましたが、結果は変わりませんでした。 EXCELファイル保存時のデフォルトディレクトリ設定のみと思われます。 デューンさん、添付していただいたサンプルを元に、 下記のようにコードを変更することで、 正常にVBSファイルカレントディレクトリを取得できるように なりました。 冬寂さん、デューンさんありがとうございました。 ■VBSファイル■■■■■■■■■■■■■■■■■■■■■■ Dim oApp Dim objWshShell Dim scriptPath 'Excelオブジェト作成 Set oApp = CreateObject("Excel.Application") 'WScript.Shellオブジェクト作成 Set objWshShell = CreateObject("WScript.Shell") oApp.Visible = True '不可視にする oApp.UserControl = True 'Excelファイルを開く scriptPath = WScript.ScriptFullName scriptPath = left(scriptPath,len(scriptPath)-len(WScript.ScriptName)) oApp.Workbooks.Open scriptPath & "TEST.xls" 'ドラッグアンドドロップファイル名を取得する Set objArgs = WScript.Arguments dim filename filename = "" on error resume next filename = objArgs(0) 'エラーハンドリング if Err.number <> 0 Then if Err.number <> 9 Then Msgbox Err.Description & "[" & Err.Number & "]" End if Err.clear End if Set objArgs = Nothing Set objWshShell = Nothing 'ユーザーフォームを表示するマクロを呼ぶ oApp.RUN "SHOW_Form_Main" ,filename |
1