Как автоматически открывать текстовые файлы: находить, копировать данные и вставлять - PullRequest
0 голосов
/ 26 марта 2020

Итак, я пытаюсь автоматизировать задачу, которая включает в себя открытие целой папки похожих документов .ist и вставку данных. У меня уже есть код, который позволяет мне нажимать на каждый элемент, но я пытаюсь сделать эту задачу полностью автоматизированной c. Я довольно новичок в этом. У меня есть опыт кодирования в C, но я кодирую vba только неделю.

Итак, вот что у меня есть:

Это код, который работает

Sub Figureitout()

    Dim fileName As Variant, text(1 To 890) As String, textline As String
    Dim num As Integer
    Dim strDir As String, fso As Object, objFiles As Object, obj As Object, fileCount As Integer
    Dim myFile As Variant
    Dim posTorque As Integer, posOffset As Integer

        'specify folder path
        strDir = "C:\Users\Desktop\Folder\"

        'create filesystemobj
        Set fso = CreateObject("Scripting.FileSystemObject")

        'get the folder
        Set objFiles = fso.GetFolder(strDir).Files

        'count all the files
        fileCount = objFiles.Count

        'Total number of files in folder
        MsgBox fileCount

        'read file name
        'fileName = Dir(strDir)
        'MsgBox fileName

        'counter intitialize
        num = 1

        Do Until num = fileCount

            'choose file
            myFile = Application.GetOpenFilename("Text Files(*.IST),*.ist", , , , False)

                'open file
                Open myFile For Input As #num

                    'copy file contents
                    Do Until EOF(num)
                        Line Input #(num), textline
                        text(num) = text(num) & textline

                    Loop

                    'find data
                    posTorque = InStr(text(num), "Torque:")
                    posOffset = InStr(text(num), "Offset:")

                    'close file
                    Close #num

                'make sure offset value exists in document
                If InStr(text(num), "Offset:") <> 0 Then

                    'paste data
                    Range("A" & num).Value = Mid(text(num), posTorque + 12, 4)
                    Range("B" & num).Value = Mid(text(num), posOffset + 13, 4)

                End If

                'delete chosen file
                Kill (myFile)

            'increment prior to loop
            num = num + 1

            'Reset data
            posTorque = 0
            posOffset = 0

        Loop

End Sub

Так что я думаю о том, что-то вроде:

For Each fileName in fileCount
   FileName = "Dir(strDir)"
   Open fileName for Input As #num 

но я продолжаю получать ошибки несоответствия типов. Я предполагаю, что это потому, что fileName является строкой в ​​этом сценарии?

Советы? Трюки? Совет?

1 Ответ

1 голос
/ 27 марта 2020

Нет необходимости хранить полный текст из всех файлов в массиве, просто проверяйте каждую строку, когда вы ее читаете.

Sub ProcessFiles()

    Const FOLDER = "C:\Users\Desktop\Folder\"

    Dim ws As Worksheet
    Dim sFilename As String, textline As String
    Dim i As Integer, ff As Integer, p As Integer, count As Long

    sFilename = Dir(FOLDER & "*.ist") ' first file

    Set ws = ActiveSheet
    i = 0
    Do While Len(sFilename) > 0
        ff = FreeFile
        i = i + 1

        Open FOLDER & sFilename For Input As #ff

        Do Until EOF(ff)
            Line Input #ff, textline

            p = InStr(textline, "Torque:")
            If p > 0 Then
                ws.Range("A" & i).Value = Mid(textline, p + 12, 4)
            End If

            p = InStr(textline, "Offset:")
            If p > 0 Then
                Range("B" & i).Value = Mid(textline, p + 13, 4)
            End If
        Loop
        Close ff

        sFilename = Dir ' get next
        count = count + 1
    Loop

    MsgBox count & " files proccessed in " & FOLDER, vbInformation

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...