Обновление (диапазон) ячеек в листах путем вызова vba-функции на основе строк - PullRequest
0 голосов
/ 20 апреля 2020

Я хотел бы проанализировать строки, используя основанную на строках VBA-функцию. Строки импортируются из CSV-файла, где данные поля инкапсулированы между двумя "-символами". Строки хранятся в столбце [A] рабочего листа "SO".

Функция "Parse_Str" анализирует строка, хранит данные в одномерном массиве и предоставляет логический результат, хранящийся в столбце [B]. Он имеет два аргумента:
1. строка для анализа
2. адрес первой ячейки, где диапазон должен быть сохранен в

[A]                                [B]
"001","Name 1","Descripton 1"      =Parse_Str(A2; adres(rij(C2); kolom(C2)))
"002","Name 2","Descripton 2"      =Parse_Str(A3; adres(rij(C3); kolom(C3)))
"003","Name 3","Descripton 3"      =Parse_Str(A4; adres(rij(C4); kolom(C4)))
"004","Name 4","Desc 4","Rem 4"    =Parse_Str(A5; adres(rij(C5); kolom(C5)))

Во время выполнения функции массив сохраняется в диапазоне, начинающемся с C2, C3, C4 и c. Желаемый вывод:

[B]    [C]    [D]       [E]                [F]
TRUE   001    Name 1    Description 1
TRUE   002    Name 2    Description 2
TRUE   003    Name 3    Description 3 
TRUE   004    Name 4    Desc 4             Rem 4

Исходный код:

Option Explicit

Sub test()

Dim i As Integer
Dim s_SRCE As String, s_DEST As String
Dim b As Boolean
Dim r As Range

    'Clear destination fields
    Worksheets("SO").Range("C2", "F5").Value = ""

    For i = 2 To 5
        Set r = Worksheets("SO").Range("A" & i)

        s_SRCE = r.Value
        s_DEST = Worksheets("SO").Range("C" & i).Address

        'Parse string and fill destination fields
        b = Parse_Str(s_SRCE, s_DEST)
    Next i

End Sub

Function Parse_Str(s_TRN As String, s_ADR As String) As Boolean

Dim i As Integer, n As Integer, p As Integer, q As Integer
Dim r As Range
Dim a() As String

    'Replace combinations of comma and double qoutes by '|'
    s_TRN = Replace(Replace(Replace(Replace(Replace(s_TRN & ",", "0000000000", ""), """,""", "|"), ",""", "|"), """,", "|"), """", "")

    'Get number of fields
    n = Len(s_TRN) - Len(Replace(s_TRN, "|", ""))

    ReDim a(1 To n)

    'Parse string to array
    p = 1
    For i = 1 To n
        q = InStr(p, s_TRN, "|")
        a(i) = Mid(s_TRN, p, q - p)
        p = q + 1
    Next i

    Set r = Worksheets("SO").Range(s_ADR)
    Set r = r.Resize(1, n)
    r.Value = a

    Parse_Str = Worksheets("SO").Range(s_ADR).Value <> ""

End Function

Запуск подпрограммы «Test» обеспечивает требуемый вывод в листе «SO».
Однако, вызывая функцию «Parse_Str» из листа «SO», он не 't и приводит к # VALUE ошибкам в столбце [B].

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