В приведенном ниже коде мне удалось просмотреть 9 текстовых файлов (количество файлов может различаться) и получить определенную строку в этих текстовых файлах. Значение, которое я получил, является количественным и всегда указывается в одном и том же месте. У меня возникли трудности с получением суммы этих величин.
Текущий код:
Set oFile2 = FSO.OpenTextFile(File.path, ForReading)
i = 0
'process text files
Do While oFile2.AtEndOfStream <> true
text = oFile2.ReadLine
'WSCript.Echo text
ReDim Preserve SSheet(i)
SSheet(i) = text
i=i+1
Loop
oFile2.Close
Set oFile2 = Nothing
Set objFSO = Nothing
'find row and strips down quantity
Dim QtyTrim
QtyTrim = Mid((SSheet(30)),6,4)
'convert quantity to int
Dim QtyInt
QtyInt = CInt(QtyTrim)
WSCript.echo QtyInt
Main
), которая перебирает файлы заданной папки (FOLDER_PATH
) и для каждого файла с заданным расширением (FILE_EXTENSION
) вызывает функцию (GetQuantity
), которая извлекает строку (FoundString
), определенную константами функции, преобразует строку в целое число и передает целое число обратно в процедуру, где оно добавляется в переменную (Total
). Наконец, отображается окно сообщения с итоговой суммой.GetQuantity
и на том, как она используется в процедуре вызова, которая может отличаться от того, что вы имели в виду. Непонятно, почему вы решили, что предыдущий код не имеет значения.Empty
.Option Explicit
Main
Sub Main()
Const FOLDER_PATH = "C:\Test"
Const FILE_EXTENSION = "txt"
Dim fso: Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FolderExists(FOLDER_PATH) Then
MsgBox "The path """ & FOLDER_PATH & """ doesn't exist!", vbExclamation
Exit Sub
End If
Dim fsoFile, Quantity, Total, FilesFound
For Each fsoFile In fso.GetFolder(FOLDER_PATH).Files
If StrComp(fso.GetExtensionName(fsoFile), FILE_EXTENSION, _
vbTextCompare) = 0 Then
FilesFound = FilesFound + 1
Quantity = GetQuantity(fso, fsoFile.Path)
If Not IsEmpty(Quantity) Then
Total = Total + Quantity
Quantity = Empty ' reset for the next iteration
End If
End If
Next
If IsEmpty(FilesFound) Then
MsgBox "No ." & FILE_EXTENSION & "-files found!", vbExclamation
Exit Sub
End If
If IsEmpty(Total) Then
MsgBox "No quantities found!", vbExclamation
Exit Sub
End If
' Continue, e.g.:
MsgBox "Total: " & Total, vbInformation
End Sub
Function GetQuantity(fso, FilePath)
Const STRING_LINE = 31
Const STRING_FIRST_CHAR = 6
Const STRING_LENGTH = 4
Dim fsoTextFile: Set fsoTextFile = fso.OpenTextFile(FilePath, 1)
Dim Line, FoundString
Do Until fsoTextFile.AtEndOfStream
Line = Line + 1
If Line = STRING_LINE Then
FoundString = fsoTextFile.ReadLine
Exit Do
Else
fsoTextFile.ReadLine
End If
Loop
fsoTextFile.Close
If IsEmpty(FoundString) Then Exit Function
On Error Resume Next
GetQuantity = CLng(Mid(FoundString, STRING_FIRST_CHAR, STRING_LENGTH))
On Error GoTo 0
End Function
Это сработало намного лучше, чем мой предыдущий пример, очень ценю!
Отвечает ли это на ваш вопрос? Как суммировать значения в цикле