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

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

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

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

VBScript

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

2回答

1105閲覧

vbsでの日付取得時のエラー原因がわかりません、、

mavic

総合スコア7

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

VBScript

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2020/04/27 11:33

test.xlsxにyymmddというシートを作り、yymmdd.csvの内容をコピーするvbsを教えていただきました。
ですが、vbsを実行するとyymmdd.csvが見つからないとエラーが出ます。
yymmddは当日の日付です。
同じフォルダ内にxlsx、csv、vbsすべてあります。
対策はありますでしょうか?

また下記コードの
Set qt = sh.QueryTables.Add("TEXT;" & f & n & ".csv", sh.Range("A1"))

Set qt = sh.QueryTables.Add("TEXT;" & f & "yymmdd.csv", sh.Range("A1"))
にするとうまくいきました。なぜか作成したシート名に曜日も入りますが、、

以下コードです。

Option Explicit
Dim bk, ex, f, n, qt, sh, so
Set so = CreateObject("Scripting.FileSystemObject")
f = so.GetParentFolderName(WScript.ScriptFullName) & ""
Set ex = CreateObject("Excel.Application")
ex.Application.DisplayAlerts = False
ex.Visible = False
Set bk = ex.Workbooks.Open(f & "test.xlsx")
Set sh = bk.Worksheets.Add(, bk.Worksheets(bk.Worksheets.Count))
n = Replace(Date, "/", "")
sh.Name = n
Set qt = sh.QueryTables.Add("TEXT;" & f & n & ".csv", sh.Range("A1"))
With qt
.TextFilePlatform = 65001
.TextFileParseType = 1
.TextFileCommaDelimiter = True
.RefreshStyle = 0
.Refresh
.Delete
End With
bk.Save
bk.Close
ex.Quit
Set qt = Nothing
Set sh = Nothing
Set bk = Nothing
Set ex = Nothing
Set so = Nothing

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

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

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

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

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

imihito

2020/04/27 22:46

エラーの発生する端末で `MsgBox Date` を実行すると、何が表示されますか?
guest

回答2

0

"FileSystemObject"を既に使っているので、ファイル名称をセットする直前にファイルの存在確認を入れては如何でしょうか。

>Set qt = sh.QueryTables.Add("TEXT;" & f & n & ".csv", sh.Range("A1"))
この前です。かつ、確認OK後の文字列を渡す方が良いです。こんな感じ。
kakunin = f & n & ".csv"
【kakuninの存在確認処理】
Set qt = sh.QueryTables.Add("TEXT;" & kakunin, sh.Range("A1"))

'----------------------------
【kakuninの存在確認処理】の記述部分
If so.FileExists(kakunin) = False Then
MsgBox kakunin & "指定されたファイルは存在しません。"
End If
'----------------------------

エラーの場合、こちらの表示結果で対処方法が分かります。
また、運用時もこの様に存在確認は行われた方が宜しいかと思います。
p.s.
sh.QueryTables.Addは使った事がないので分かりません。
ただし、これをする事でファイル文字列の問題なのか、その後の処理の問題か切り分けができます。

投稿2020/05/14 18:37

tosi

総合スコア553

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

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

0

n = Replace(Date, "/", "")
msgbox n

を実行してみてください。ファイルが見つからない理由がわかると思います。

n = Replace(Date, "/", "") ではなく、
n = ex.Text(Date,"yymmdd") でうまくいくのでは。

投稿2020/05/14 15:29

garucia

総合スコア26

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問