質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

Q&A

解決済

2回答

2937閲覧

VBSCRIPTで引数を指定して動作

matrix99999

総合スコア15

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

0グッド

0クリップ

投稿2019/01/05 02:29

編集2019/01/05 02:36

前提・実現したいこと

VBSCRIPTで引数を指定して動作させたいと思います。
引数は、フォルダ名とファイル名です。

実行

wscript excel2.vbs d:\test\excelvbs d:\test\excelvbs\result\test.xlsx

エラーメッセージ
構文エラー 800A03EA VBScriptコンパイルエラーです。

該当のソースコード

Option Explicit
' 統合したファイルの保存名
Dim margedBookPath
margedBookPath = = VFile01
' 対象ファイルが保存されているパス
Dim targetPath
targetPath = VPath01

引数を入れない場合

Option Explicit
' 統合したファイルの保存名
Dim margedBookPath
margedBookPath = "D:\test\excelvbs\result\test.xlsx"
' 対象ファイルが保存されているパス
Dim targetPath
targetPath = "D:\test\excelvbs"

ではうまく動作します。

ここに問題に対して試したことを記載してください。
1 引数の設定でsetを外してもダメでした。
VFile01 = Wscript.Arguments(0)
VPath01 = Wscript.Arguments(1)

wscript "excel2.vbs d:\test\excelvbs" "d:\test\excelvbs\result\test.xlsx"

でも同様でした。set VFile01 = Wscript.Arguments(0)
set VPath01 = Wscript.Arguments(1)

引数の記載に関してご教示お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

■発生しているエラーについて

margedBookPath = = VFile01のイコール2連続が原因ですね。
※otnさんの回答と同様です

■【set】の利用について
setステートメントはオブジェクトへの参照を変数に代入する際に利用しますので、
今回のケースに当てはめると以下の使い分けになります。

・setが必要な場合
引数オブジェクトを代入するとき。
Set args = Wscript.Arguments

・setが不要
直接、引数オブジェクトの値を代入するとき。
args1 = Wscript.Arguments(0)

■引数について

引数の個数で分岐することで、引数設定ミスの実行時エラーを回避できます。
※すでに実装していたら申し訳ございません。

dim args Set args = Wscript.Arguments const CST_File01 = "d:\test\excelvbs" const CST_Pate01 = "d:\test\excelvbs\result\test.xlsx" if args.Count = 0 then ' 引数設定しなかった場合 VFile01 = CST_File01 VPath01 = CST_Pate01 elseif args.Count = 1 then ' 引数1つの場合 VFile01 = args (0) VPath01 = CST_Pate01 elseif args.Count >= 2 then ' 引数2つの場合 VFile01 = args (0) VPath01 = args (1) end if

以上

投稿2019/01/05 03:45

MiyakeYusuke

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

matrix99999

2019/01/09 14:27

ありがとうございます。 無事動作しました。
guest

0

ベストアンサー

実行したコードはどう言うものですか?推測すると、

VBS

1Option Explicit 2Dim VFile01, VPath01 3VFile01 = Wscript.Arguments(0) 4VPath01 = Wscript.Arguments(1) 5' 統合したファイルの保存名 6Dim margedBookPath 7margedBookPath = = VFile01 8' 対象ファイルが保存されているパス 9Dim targetPath 10targetPath = VPath01

ですか?
そうであれば、margedBookPath = = VFile01のところに、イコールが2つあるのが原因です。

投稿2019/01/05 02:49

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

matrix99999

2019/01/05 03:02 編集

回答ありがとうございます。 ご指摘のところ失念していました。 下記コードで動作させましたが。 Set targetFolder = fso.GetFolder(targetPath)でパスが見つかりませんとでます。 wscript excel3.vbs "d:\test\excelvbs" "d:\test\excelvbs\result\test.xlsx" にて実行 コード: Option Explicit Dim VFile01, VPath01 VFile01 = Wscript.Arguments(0) VPath01 = Wscript.Arguments(1) Dim margedBookPath margedBookPath = VFile01 Dim targetPath targetPath = VPath01 Dim targetExtension targetExtension = "xlsx" Dim fso Set fso = CreateObject("Scripting.FileSystemObject") Dim targetFolder Set targetFolder = fso.GetFolder(targetPath) Dim xlApp Set xlApp = CreateObject("Excel.Application") xlApp.Visible = True Dim margedBook Set margedBook = xlApp.Workbooks.Add Dim initialSheetsCount initialSheetsCount = margedBook.Worksheets.Count Dim targetBook Dim f For Each f In targetFolder.Files Dim targetSheet Dim copiedSheet If fso.GetExtensionName(f.Name) = targetExtension Then Set targetBook = xlApp.Workbooks.Open(f.Path, 0, True) Set targetSheet = targetBook.Worksheets(1) Call targetSheet.Copy(, margedBook.Worksheets(margedBook.Worksheets.Count)) Set copiedSheet = margedBook.Worksheets(margedBook.Worksheets.Count) copiedSheet.Name = fso.GetBaseName(targetBook.Name) Set targetSheet = Nothing call targetBook.Close(False) Set targetBook = Nothing End If Next xlApp.DisplayAlerts = False Dim i For i = 1 To initialSheetsCount margedBook.Worksheets(1).Delete Next Call margedBook.SaveAs(margedBookPath) Call margedBook.Close(False) xlApp.DisplayAlerts = True xlApp.Quit Set xlApp = Nothing ご教示いただければと思います。
otn

2019/01/05 03:08

GetFolderに対して、対してディレクトリ名じゃなくてファイル名を与えているからですね。 かなり混乱している様子なので、いちど落ち着いて考えるのがいいと思います。
matrix99999

2019/01/05 03:13

ありがとうございます。 無事動作しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問