Добрый день. Подскажите с какой стороны подступиться к вопросу. Имеется терминал сбора данных (ТСД) Данное устройство выгружает данные в виде файла 1.txt (первые 7 цифр это артикул /ТАБУЛЯЦИЯ/ вес товара /ТАБУЛЯЦИЯ/ количество ящиков Хочу реализовать по кнопке (Выбор файла) в "Номенклатуре.xlsx" в листе "Продажи", который бы вызывал макрос, позволяющий сделать выбор файла txt, импорт данных из 1.txt, сравнение артикула из файла с колонкой "А" на листе "База". При совпадении артикулов вставить в лист "Продажи" в колонку "B" наименование товара из листа "база" колонки "B". Данные из txt "Вес товара" и "количество ящиков" в соответсвтующие колонки на листе "Продажи" ("Ящ." "Вес"). Фишка еще в том что в файле txt артикул 8 символов (7 цифр и ПРОБЕЛ), а в "базе" артикул без пробела. Так же обстоит дело с весом и ящиками (везде пробел лишний, который при копировании не даст возможность применять математические действия). Кроме того вес приходит с точкой, а надо с запятой. И последнее: нужно чтобы Данные заносились последовательно в лист "продажи". То есть: я нажал 1 раз на кнопку - данные выгрузились. Потом еще раз нажал на кнопку, выбрал другой txt и данные выгрузились ниже предыдущих и так далее.
Буду благодарен за помощь. Если это чересчур, подскажите с чего начать. Не знаю за что хвататься. Задача для моего личного удобства а так же развития в написании макросов, поэтому прошу не кидаться в меня тапками если многого прошу)))
Спасибо.
Добрый день. Подскажите с какой стороны подступиться к вопросу. Имеется терминал сбора данных (ТСД) Данное устройство выгружает данные в виде файла 1.txt (первые 7 цифр это артикул /ТАБУЛЯЦИЯ/ вес товара /ТАБУЛЯЦИЯ/ количество ящиков Хочу реализовать по кнопке (Выбор файла) в "Номенклатуре.xlsx" в листе "Продажи", который бы вызывал макрос, позволяющий сделать выбор файла txt, импорт данных из 1.txt, сравнение артикула из файла с колонкой "А" на листе "База". При совпадении артикулов вставить в лист "Продажи" в колонку "B" наименование товара из листа "база" колонки "B". Данные из txt "Вес товара" и "количество ящиков" в соответсвтующие колонки на листе "Продажи" ("Ящ." "Вес"). Фишка еще в том что в файле txt артикул 8 символов (7 цифр и ПРОБЕЛ), а в "базе" артикул без пробела. Так же обстоит дело с весом и ящиками (везде пробел лишний, который при копировании не даст возможность применять математические действия). Кроме того вес приходит с точкой, а надо с запятой. И последнее: нужно чтобы Данные заносились последовательно в лист "продажи". То есть: я нажал 1 раз на кнопку - данные выгрузились. Потом еще раз нажал на кнопку, выбрал другой txt и данные выгрузились ниже предыдущих и так далее.
Буду благодарен за помощь. Если это чересчур, подскажите с чего начать. Не знаю за что хвататься. Задача для моего личного удобства а так же развития в написании макросов, поэтому прошу не кидаться в меня тапками если многого прошу)))
Sub importTxt() Dim A(), Sh As Worksheet Set Sh = ActiveSheet Filename = Get_FileName Set objFSO = CreateObject("Scripting.FileSystemObject") Set objTextFile = objFSO.OpenTextFile(Filename, 1) Set RegExp = CreateObject("VBScript.RegExp") RegExp.Pattern = "(\d{7,})\D+([0-9\.]+)\D+(\d+)" LastRow = Sh.Cells(Sh.Rows.Count, 1).End(xlUp).Row If Sh.Cells(1, 1) <> "" Then LastRow = LastRow + 1 Do Until objTextFile.AtEndOfStream 'пока не кончился файл s = objTextFile.ReadLine 'читаем построчно Set oMatches = RegExp.Execute(s) If oMatches.Count > 0 Then ReDim A(1 To 1, 1 To 3) A(1, 1) = oMatches(0).subMatches(0) A(1, 2) = Val(oMatches(0).subMatches(1)) A(1, 3) = oMatches(0).subMatches(2) Sh.Cells(LastRow, 1).Resize(1, 3) = A LastRow = LastRow + 1 End If Loop objTextFile.Close Set objTextFile = Nothing Set RegExp = Nothing Set objFSO = Nothing
End Sub Function Get_FileName(Optional ByVal Title As String = "Выберите файл для обработки", _ Optional ByVal FilterDescription As String = "Файлы TXT", _ Optional ByVal FilterExtention As String = "*.txt") As String On Error Resume Next With Application.FileDialog(msoFileDialogOpen) ' .ButtonName = "Выбрать": .Title = Title: .InitialFileName = InitialPath .Filters.Clear: .Filters.Add FilterDescription, FilterExtention If .Show <> -1 Then Exit Function Get_FileName = .SelectedItems(1) End With End Function
Sub importTxt() Dim A(), Sh As Worksheet Set Sh = ActiveSheet Filename = Get_FileName Set objFSO = CreateObject("Scripting.FileSystemObject") Set objTextFile = objFSO.OpenTextFile(Filename, 1) Set RegExp = CreateObject("VBScript.RegExp") RegExp.Pattern = "(\d{7,})\D+([0-9\.]+)\D+(\d+)" LastRow = Sh.Cells(Sh.Rows.Count, 1).End(xlUp).Row If Sh.Cells(1, 1) <> "" Then LastRow = LastRow + 1 Do Until objTextFile.AtEndOfStream 'пока не кончился файл s = objTextFile.ReadLine 'читаем построчно Set oMatches = RegExp.Execute(s) If oMatches.Count > 0 Then ReDim A(1 To 1, 1 To 3) A(1, 1) = oMatches(0).subMatches(0) A(1, 2) = Val(oMatches(0).subMatches(1)) A(1, 3) = oMatches(0).subMatches(2) Sh.Cells(LastRow, 1).Resize(1, 3) = A LastRow = LastRow + 1 End If Loop objTextFile.Close Set objTextFile = Nothing Set RegExp = Nothing Set objFSO = Nothing
End Sub Function Get_FileName(Optional ByVal Title As String = "Выберите файл для обработки", _ Optional ByVal FilterDescription As String = "Файлы TXT", _ Optional ByVal FilterExtention As String = "*.txt") As String On Error Resume Next With Application.FileDialog(msoFileDialogOpen) ' .ButtonName = "Выбрать": .Title = Title: .InitialFileName = InitialPath .Filters.Clear: .Filters.Add FilterDescription, FilterExtention If .Show <> -1 Then Exit Function Get_FileName = .SelectedItems(1) End With End Function