JustAnswer のしくみ:
  • 専門家に質問
    知識豊富な専門家があらゆる質問にお答えするために常に待機しています。
  • 専門家が丁寧に対応
    E メールやサイト内オンラインメッセージなど、さまざまな手段で回答を通知。
    必要に応じてフォローアップの質問をすることもできます。
  • 満足度 100% 保証
    専門家からの回答を確認し評価をすることで、支払うかどうかを決めます。
tsukuba_frogに今すぐ質問する
tsukuba_frog
tsukuba_frog, プログラマー
カテゴリ: プログラミング
満足したユーザー: 41
経験:  IT Professional
65805256
ここに プログラミング に関する質問を入力してください。
tsukuba_frogがオンラインで質問受付中

あるフォルダの更新日付が最新のテキストファイルの文字列から ブランクの有無を検索して、ブランクがあった場合はイベントログに エラーとしてメッセージを出したいのですが、WSHでプ

質問者の質問

あるフォルダの更新日付が最新のテキストファイルの文字列から
ブランクの有無を検索して、ブランクがあった場合はイベントログに
エラーとしてメッセージを出したいので すが、WSHでプログラムは可能でしょうか。


下記はVBAでのコードとなりますが、
イメージ的には下記のような形で最新ファイルを取得して、
取得したファイルから空白を探して、空白があった場合は
イベントログにエラーを出す仕様にしたいのですが、
どなたかお力を、お借りできますでしょうか。
宜しくお願いします。

Sub 最新ファイルを開く()

Dim strFileName As String
Dim strFilePath As String

strFilePath = ThisWorkbook.Path & "¥"
strFileName = fncGetNewFile(strFilePath)

If strFileName = "" Then
  MsgBox "ファイルがありません。"
  Exit Sub
End If

Workbooks.Open strFilePath & strFileName

End Sub


Public Function fncGetNewFile(strFilePath As String) As String

Dim strFileName As String
Dim tmpFileName As String
Dim time As Date
Dim pretime As Date
 
tmpFileName = Dir(strFilePath & "*.xls")

Do Until tmpFileName = ""
  pretime = FileDateTime(strFilePath & tmpFileName)
  If pretime > time Then
    time = pretime
    strFileName = tmpFileName
  End If
  tmpFileName = Dir()
Loop

fncGetNewFile = strFileName

End Function

========================================

空白セルを開いたテキストから検索
========================================

========================================

空白セルの有無をイベントログに表示
========================================
投稿: 5 年 前.
カテゴリ: プログラミング
専門家:  tsukuba_frog 返答済み 5 年 前.
まずイベントログへの出力方法をご回答いたします。

1.VBAの参照設定で「Windows Scripting Host Object Model」を追加します。

2.その上で、以下のようなソースコードを記述します。

 Set WshShell = CreateObject("WScript.Shell")
 WshShell.LogEvent 0, "test message"

0の部分は

0 SUCCESS
1 ERROR
2 WARNING
4 INFORMATION

それぞれこのような意味になります。
ご質問者様の意図を汲みますと1か2となるでしょうか。
専門家:  tsukuba_frog 返答済み 5 年 前.
ご質問内容に対してご確認です。

>あるフォルダの更新日付が最新のテキストファイルの文字列から
とありますが、
ご提示のVBAのコードを見ますと、マクロが含まれるxlsと同じフォルダ内の「xlsファイル」を探しているようにお見受けします。
中身を確認したいファイルは「テキストファイル」と「xlsファイル」のどちらでしょうか?
質問者: 返答済み 5 年 前.

ご連絡ありがとうございます。

中身を確認したいのはテキストファイルとなります。

誤解を招いてしまい申し訳ありません。

また、一件目に頂いた回答を確認いたしました。

ありがとうございます。

専門家:  tsukuba_frog 返答済み 5 年 前.
テキストファイルですね。
そうしますと、次に「テキストファイルから空白を探す」、という点ですが、
もう少し具体的に教えて頂けますでしょうか。
テキストファイルはどういった書式になのでしょうか?
質問者: 返答済み 5 年 前.

パフォーマンスログを取得しているのですが、excelをインストールしていないので、

テキストのCSVファイルにログが書きこまれています。

まれにログが取得できないことがあるので、

そのテキスト形式で書きこまれるログのなかに空白(ログの未取得)を確認できるスクリプトがあれば、と思いご相談させて頂いております。

説明不足で申し訳ございません。

 

専門家:  tsukuba_frog 返答済み 5 年 前.
ざっと書いてみました。

CSVファイルのパスと、その中の何列目をチェックするか(左端が0)を引数で渡すと
そのファイルをオープンし、一行ずつ読んではカンマで分割して、
チェックする部分が空白であればTrueを返し、
空白が無く最後まで読みきったらFalseを返します。

Public Function isBlankColExists(csvpath As String, checkColIndex As Integer) As Boolean
Dim fso As New FileSystemObject
Dim fs As TextStream
Dim ret As Boolean

ret = False
Set fs = fso.OpenTextFile(csvpath)
Do Until fs.AtEndOfLine
Dim line As String
Dim tmparray As Variant

line = fs.ReadLine()
tmparray = Split(line, ",")

If Trim(tmparray(checkColIndex)) = "" Then
ret = True
Exit Do
End If
Loop

fs.Close

isBlankColExists = ret

End Function

ご参考になれば。
質問者: 返答済み 5 年 前.

ご対応ありがとうございます。

大変助かります。

実はパスを指定するところですが、ファイル名が(testyyyymmdd.csv)というように毎日日付が変わってしまうため、パスでの指定が出来ず困っていたのですが、何か良い案はございますでしょうか。

お忙しいところ、大変申し訳ございませんが、宜しくお願いいたします。

質問者: 返答済み 5 年 前.

ご対応ありがとうございます。

大変助かります。

実はパスを指定するところですが、ファイル名が(testyyyymmdd.csv)というように毎日日付が変わってしまうため、パスでの指定が出来ず困っていたのですが、何か良い案はございますでしょうか。

お忙しいところ、大変申し訳ございませんが、宜しくお願いいたします。

専門家:  tsukuba_frog 返答済み 5 年 前.
それでしたらご質問者様作成のfncGetNewFileのなかで

 tmpFileName = Dir(strFilePath & "*.csv")

のようにすればよいように思いますが…
それだとうまくいかないでしょうか?
tsukuba_frogをはじめその他名のプログラミングカテゴリの専門家が質問受付中
質問者: 返答済み 5 年 前.

返信ありがとうございます。

VBAですとDir()が使用できると思うのですが、

今回はVBSのみでスクリプトを作れればと思っております。

VBSにはDir()が使用できないと思われますので、

ご質問させて頂きました。

私は現在頂いたコードをテストする環境にいないため、

動作確認はできておりませんが、

tsukubo frog様には今回の件、大変感謝しております。

お忙しいところ、ご対応いただきありがとうございます。

 

専門家:  tsukuba_frog 返答済み 5 年 前.
>今回はVBSのみでスクリプトを作れればと思っております。

そうでしたか。
それでしたら同じアルゴリズムで、こんな感じで書けると思いますよ。

Public Function fncGetNewFile2(dirpath)
Dim fso
Dim ret

Dim dir
Dim fil
Dim time
Dim pretime
Dim strFileName

Set fso = CreateObject("Scripting.FileSystemObject")

Set dir = fso.GetFolder(dirpath)

For Each fil In dir.Files
If fso.GetExtensionName(fil) = "xls" Then
pretime = fil.DateLastModified
If pretime > time Then
time = pretime
strFileName = fil.Name
End If
End If
Next

fncGetNewFile2 = strFileName

End Function

ご参考になれば。

プログラミング についての関連する質問