- PR -

VBSファイルのカレントディレクトリ取得に関して

1
投稿者投稿内容
2che
会議室デビュー日: 2005/06/08
投稿数: 5
投稿日時: 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

デューン
大ベテラン
会議室デビュー日: 2004/04/21
投稿数: 174
お住まい・勤務地: Tokyo
投稿日時: 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 ]
冬寂
ぬし
会議室デビュー日: 2002/09/17
投稿数: 449
投稿日時: 2009-02-25 09:32
外してたらすまんけど

Excel側の「ツール→オプション」から、全般タブのカレントフォルダ名を確認してみたらどうでしょ?

# ちとゆっくり読んでる暇がないのですみません。
2che
会議室デビュー日: 2005/06/08
投稿数: 5
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)