Попытка автоматического разделения данных в Excel с помощью VBA - PullRequest
3 голосов
/ 30 ноября 2011

У меня нет абсолютно никакого опыта программирования в Excel VBA, кроме того, что я написал функцию добавления метки данных к штрих-коду, который был отсканирован на нашей производственной линии несколько недель назад, в основном методом проб и ошибок.

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

Данные поступают в формате: 11111 * A153333 * 11/30/11 плюс возврат каретки, где * будет разделителем. Все примеры, которые я нашел, похоже, вообще ничего не делают.

Например, вот что я нашел при разделении на "", но ничего не произойдет, если я поменяю его на *.

Sub splitText()

'splits Text active cell using * char as separator
Dim splitVals As Variant
Dim totalVals As Long

splitVals = Split(ActiveCell.Value, "*")
totalVals = UBound(splitVals)

Range(Cells(ActiveCell.Row, ActiveCell.Column + 1), Cells(ActiveCell.Row, ActiveCell.Column + 1 + totalVals)).Value = splitVals
End Sub

И это применяется в разделе кода Sheet1, если это помогает.

Это действительно не может быть так сложно, не так ли?

Редактировать: Попытка добавить Vlookup в VBA.

Итак, как я сказал ниже в комментариях, сейчас я работаю над интеграцией vlookup в это, однако он просто возвращает N / A.

Вот подпункт, который я написал, по ссылке ниже

Public Sub vlook(ByRef codeCell As Range)
Dim result As String
Dim source As Worksheet
Dim destination As Worksheet
Set destination = ActiveWorkbook.Sheets("Inventory")
Set source = ActiveWorkbook.Sheets("Descriptions")

result = [Vlookup(destination!(codeCell.Row, D), source!A2:B1397, 2, FALSE)]
End Sub

И я пытался вызвать его сразу после цикла For в изменении таблицы и только что создал другой цикл for, это / это должен быть вложенный цикл for?

Ответы [ 2 ]

2 голосов
/ 30 ноября 2011

Простое добавление кода в VBA за рабочим листом не вызовет его вызова.Вам нужно обработать событие worksheet_change.Следующее должно помочь:

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    Dim cell As Range
    For Each cell In Target.Cells
        If cell.Column = 1 Then SplitText cell
    Next
    Application.EnableEvents = True
End Sub

Public Sub SplitText(ByRef codeCell As Range)

    'splits Text active cell using * char as separator
    Dim splitVals As Variant
    Dim totalVals As Long

    splitVals = Split(codeCell.Value, "*")
    totalVals = UBound(splitVals)

    Range(Cells(codeCell.Row, codeCell.Column), Cells(codeCell.Row, codeCell.Column + totalVals)).Value = splitVals

End Sub
2 голосов
/ 30 ноября 2011

Если вы хотите обрабатывать штрих-коды автоматически при их вводе, вам нужно что-то вроде этого (идет в модуле рабочего листа).

Private Sub Worksheet_Change(ByVal Target As Range)

Dim splitVals As Variant
Dim c As Range, val As String

    For Each c In Target.Cells

        If c.Column = 1 Then 'optional: only process barcodes if in ColA
            val = Trim(c.Value)
            If InStr(val, "*") > 0 Then
                splitVals = Split(val, "*")
                c.Offset(0, 1).Resize( _
                   1, (UBound(splitVals) - LBound(splitVals)) + 1 _
                                       ).Value = splitVals
            End If
        End If 'in ColA

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