Поиск нескольких текстовых файлов для определенных строк данных и импорт в Excel с помощью макросов VBA - PullRequest
0 голосов
/ 29 марта 2019

Я очень новичок в VBA и собираюсь использовать его для автоматизации некоторых своих процессов.Я просмотрел этот сайт (и другие) и, хотя я нахожу очень похожие запросы, я не могу найти тот, который точно соответствует моим потребностям.

На данный момент наиболее близкой вещью, которую я нашел, является следующее: Желание создать поле поиска и кнопку для запуска сценария VBA для запуска

У меня есть исходная папка со всеми моими данными.Мои данные хранятся в нескольких текстовых файлах.Вот пример того, как выглядят данные в файлах:

10001,1,205955.00
10001,2,196954.00
10001,3,4.60
10001,4,92353.00
10001,5,85015.00
10001,6,255.90
10001,7,804.79
10001,8,205955.00
10001,9,32465.00

В каждой строке первое число представляет собой географический код, второе число представляет собой числовой код для конкретного индикатора (не важно, для чегоЯ пытаюсь это сделать), а третье число - это значение, которое я хочу импортировать в мою таблицу.Каждый географический код связан с 2247 строками.

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

Пока я написал этот код.Опять же, прости меня, если это плохой код ... Я попытался изменить назначение кода из другого поста на форуме, о котором я упоминал ранее.

Я думаю, что правильно установил место импорта ... Я хочу, чтобы он импортировался в столбец C, строку 3 листа, на котором будет присутствовать поле поиска / кнопка.Но сейчас я не уверен, как бы я начал работать с аспектом импорта.Заранее благодарим всех, кто может помочь в этом вопросе.

Sub SearchFolders()

Dim FSO As Object
Dim Folder As Object
Dim File As Object
Dim TS As Object
Dim SourceFolder As String
Dim Search As String
Dim LineNumber As Long
Dim DataSh As Worksheet

SourceFolder = "C:\Users\MarMar\Desktop\Data\Census2016\DataFiles\"
Search = TextBox1.Value

Set FSO = CreateObject("Scripting.FileSystemObject")
Set Folder = FSO.GetFolder(SourceFolder)
Set DataSh = ActiveSheet.Cells(3, 3)

For Each File In Folder.Files
   Set TS = File.OpenAsTextStream()
   LineNumber = 0

      Do While Not TS.AtEndOfStream
      LineNumber = LineNumber + 1

      If InStr(TS.ReadLine, Search) Then

      'Code to Import Values to DataSh ???

      End If
      Loop

   TS.Close
   Next File

 End Sub

Ответы [ 2 ]

0 голосов
/ 30 марта 2019

Конечный результат, который работал для меня!

Sub SearchImportData1()

Dim FSO As Object
Dim SourceFolder As String
Dim Folder As Object
Dim Import As Range
Dim Search As String
Dim TextBox1 As TextBox
Dim File As Object
Dim TS As Object
Dim LineNumber As Integer
Dim Arr As Variant

SourceFolder = "C:\Users\MarMar\Desktop\Data\Census2016\DataFiles\"

Set FSO = CreateObject("Scripting.FileSystemObject")
Set Folder = FSO.GetFolder(SourceFolder)
Set Import = ActiveSheet.Cells(2, 3)

Search = ActiveSheet.TextBox1.Text

For Each File In Folder.Files

    Set TS = File.OpenAsTextStream()
    LineNumber = 0

      Do While Not TS.AtEndOfStream

      Arr = Split(TS.ReadLine, ",")

         If Arr(0) = Search Then
         Import.Resize(1, 1).Value = Arr(2)
         Set Import = Import.Offset(1, 0)
         End If

      Loop

    TS.Close
    Next File

End Sub
0 голосов
/ 29 марта 2019

Может быть, что-то вроде этого:

Dim arr

For Each File In Folder.Files
    Set TS = File.OpenAsTextStream()
    LineNumber = 0

    Do While Not TS.AtEndOfStream

        arr = Split(TS.ReadLine, ",") 'split line to array

        'check first element in array
        If arr(0) = Search Then

            datash.Resize(1, UBound(arr) + 1).Value = arr
            Set datash = datash.Offset(1, 0)

        End If
    Loop

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