Попытка автоматического разделения данных в excel с помощью vba

У меня нет абсолютно никакого опыта программирования в 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, это / должно ли это быть вложенным циклом?

Просто добавление кода в VBA за листом фактически не вызовет его вызова. Вам нужно обработать событие workheet_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 

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

 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 
  • Слишком много папок, нет организации
  • python - как найти те же слова в двух разных Excel-книгах
  • Проблема открытия книги Excel с помощью Excel Interop
  • Автоматический список сортировки по столбцу, содержащему ячейки с формулами
  • Запустите файл Excel из исполняемого файла Windows в safemode, используйте ассоциацию файлов по умолчанию
  • Попытка сделать уникальный вход в Windows вставить фактический файл сканированного изображения в Excel
  • читать файл XLS через пакетный скрипт
  • Есть ли способ декодировать числовые коды ошибок COM в pywin32
  • Странное поведение с RegQueryValueEx whitch возвращает значение другого регистра
  • Преобразование символа Юникода в его строковое представление
  • удалять вперед при удалении KB4041678 & KB4041681
  • Давайте будем гением компьютера.