Получение данных из массива и запись в определенную ячейку - PullRequest
0 голосов
/ 10 января 2019

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

Массив выглядит так

"01/08/2019 18:00:00 BRANDED LOC PN THE PRODUCT NAME +3.46 ThePrice"

Мне нужно согласовать LOC и PN в следующем формате "LOC_PN", найти определенную ячейку с именем "LOC_PN", а затем записать ThePrice в эту ячейку на ActiveSheet.

Public Sub ImportPrices_Click()
    ''Declare Variables
    Dim PathName As String
    Dim FileName As String        

    Set fs = CreateObject("Scripting.FileSystemObject")

    PathName = "??????"        

    ''AP Prices
    FileName = PathName & "\" & "APPrices.txt"
    Set AP = fs.OpenTextFile(FileName, 1)

    Dim arrAP()
    i = 0

    Do While Not AP.AtEndOfStream
        ReDim Preserve arrAP(i)
        arrBP(i) = AP.ReadLine
    Loop      

    ap.Close
End Sub

Я ценю вашу помощь заранее. Я бился головой о стол, пытаясь разобраться в письменной части.

1 Ответ

0 голосов
/ 10 января 2019

Вопрос и формат данных текстового файла не понятны. Из того, что я понял из требования «сопоставить эти результаты с определенным именем ячейки», я думаю, что сохранение каждой строки в массиве вообще не требуется. Однако в вашем коде

  1. Я не увеличивается
  2. найдена опечатка arrBP вместо arrAP

Исправление вышесказанного может дать вам массив каждой строки файла APPrices.txt для дальнейшей обработки.

Однако, если макет данных текстового файла и ваши требования, как показано ниже enter image description here

тогда может попробовать простой код как без массива

 Option Base 0
 Public Sub ImportPrices_Click()
''Declare Variables
Dim PathName As String
Dim FileName As String

Set fs = CreateObject("Scripting.FileSystemObject")
PathName = "C:\Users\user\Desktop"
FileName = PathName & "\" & "APPrices.txt"
Set ap = fs.OpenTextFile(FileName, 1)

Dim Cols As Variant, Ln As String, Price As String, LocPin As String
    Do While Not ap.AtEndOfStream
    Ln = ap.ReadLine
    Cols = Split(Ln, Chr(9))   ' each line is splited on tab ie Chr(9)
    Price = Cols(7)
    LocPin = Cols(3) & Cols(4)
    Debug.Print LocPin, Price
    'you may match the locPin here and put the price the cells
    Loop
ap.Close

End Sub

Или другой простой способ (Изменить по требованию)

Sub test2()
Dim wb As Workbook
Dim Rng As Range, C As Range, LastRow As Long
Workbooks.OpenText FileName:="C:\Users\user\Desktop\APPrices.txt", Origin:=437, _
        StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
        ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _
        , Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), _
        Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1)), _
        TrailingMinusNumbers:=True
Set wb = ActiveWorkbook

    For Each Rng In wb.ActiveSheet.UsedRange.Columns(8).Cells
    Rng.Offset(, 1).FormulaR1C1 = "=RC[-5]&RC[-4]"      'Create column  9 With concanted LOc & Pin
    Next

    'Search Column 9 LOcPIN
    For Each Rng In ThisWorkbook.Worksheets("Sheet1").Range("A2:A25").Cells
    Set C = wb.ActiveSheet.Columns(9).Find(Rng.Value) ', LookIn:=xlValues) ', Lookat:=xlWhole)
        If Not C Is Nothing Then
        Rng.Offset(, 1).Value = C.Offset(, -1).Value                        ' Price
        End If
    Next Rng
wb.Close False
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...