0

バッチファイルコードは次のとおりです。

@echo off >summary.txt (
    for %%F in (*chkpackage.log) do findstr /l %1 "%%F" nul||echo %%  F:N/A:N/A:N/A:N/A:N/A:N/A:N/A:N/A:N/A:N/A:N/A:N/A:N/A:N/A:N/A:N/A:N/A:N/A)

バッチファイルを呼び出すVBAExcelのコードは次のとおりです。

FileSet = Sheet1.Range("C13")
txtFpath = Sheet1.Range("C7").Value
FilePath = txtFpath & "\res.bat"

ChDrive "D"
RSP = Shell(Environ$("COMSPEC"), vbNormalFocus)
Application.Wait Now + TimeValue("00:00:03")
SendKeys "CD " & txtFpath & "{ENTER}", True
Application.Wait Now + TimeValue("00:00:03")
SendKeys "start " & FilePath & " " & FileSet & "{ENTER}", True
Application.Wait Now + TimeValue("00:00:03")
SendKeys "exit " & "{ENTER}", True
Application.Wait Now + TimeValue("00:00:03")
SendKeys "exit " & "{ENTER}", True

しかし、私はバッチファイルを使いたくありません。VBAで使用するコマンドに変更したい。したがって、VBAを使用してバッチとコマンドラインを呼び出す代わりに、VBAとコマンドラインのみを使用できます。

簡単な説明は、そのコマンドをバッチファイルでExcel-VBAに入れ、VBA呼び出しを使用して実行し、cmdそのコマンドを自動入力してcmdそのコードを高く評価したいということSendkeysです。

4

1 に答える 1

3

Microsoft Scripting Runtime[ツール]-> [ VBA IDEからの参照])への参照を追加できます。これにより、 FileSystemObjectが提供され、次のことが可能になります。

Dim fso As New FileSystemObject
Dim fle As Variant
For Each fle In fso.GetFolder(txtFpath).Files
    'processing here
Next

Like演算子を使用して、ファイルを特定のパターンに制限できます。

For Each fle In fso.GetFolder(txtFpath).Files
    If fle.Name Like "*chkpackage.log" Then
        'processing here
    End If
Next

OpenAsTextStreamメソッドを使用してTextStreamオブジェクトを取得し、ReadAllメソッドを使用してファイルの内容を読み取ることができます。

For Each fle In fso.GetFolder(txtFpath).Files
    If fle.Name Like "*chkpackage.log" Then
        Dim txt As TextStream, contents As String
        Set txt = fle.OpenAsTextStream(ForReading)
        contents = txt.ReadAll
        txt.Close

        'process contents of file here
    End If
Next

Split(contents, vbCrLf)解析する前に、コンテンツを行の配列に分割するために使用できます(vbLfまたはvbCr、行区切り文字がWindowsではなくUnix / Macの場合に使用します)。

または、このメソッドを使用してReadLine、ファイルを1行ずつ読み取ることもできます。プロパティをチェックしてAtEndOfStream、ファイルの終わりを超えて読み取ろうとしていないことを確認する必要があります。

'Within the For Each loop
Dim txt As TextStream, currentLine As String
Set txt = fle.OpenAsTextStream(ForReading)
Do While Not txt.AtEndOfStream
    currentLine = txt.ReadLine

    'process current line here
Loop
txt.Close
于 2012-12-11T07:43:16.070 に答える