【问题标题】:Excel VBA Text To ColumnsExcel VBA 文本到列
【发布时间】:2018-05-01 16:27:44
【问题描述】:

早上好,提前致谢, 我正在尝试运行 VBA 宏以使我的最终用户能够将条形码扫描到 excel 中,然后使用命令按钮将条形码拆分为其组件类型,使用文本到列 vba 宏,然后将其分解为项目、第一页和最后一页框中的页面。 由于必须在不同位置拆分 3 种不同长度的条形码,作为权宜之计,我在工作簿中创建了 3 个选项卡,以便他们可以扫描和分解项目。 理想情况下,我希望能够在一张工作表上完成这一切,并让编码识别需要拆分的内容和位置。 下面是我必须为其中一个项目工作的编码,但它只能识别第一组数组,而不是随后的 3 组。谁能告诉我如何添加额外的数组来拆分不同的条形码,在正确的位置

Sub BarcodeSplit()
On Error GoTo myEnd:

    ' BarcodeSplit Macro
    '
    ' Keyboard Shortcut: Ctrl+b
    '
        ActiveCell.Offset(0, 1).Columns("A:A").EntireColumn.Select
        ActiveCell.Select
        ActiveCell.FormulaR1C1 = "Item"
        ActiveCell.Offset(1, -1).Range("A1").Select
        Range("B2").Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.TextToColumns Destination:=Range("B2"), DataType:=xlFixedWidth, _
            FieldInfo:=Array(Array(0, 2), Array(10, 2), Array(17, 2), Array(28, 2)), _
            FieldInfo:=Array(Array(0, 2), Array(10, 2), Array(17, 2), Array(28, 2)), _
            FieldInfo:=Array(Array(0, 2), Array(14, 2), Array(21, 2), Array(32, 2)), _
            FieldInfo:=Array(Array(0, 2), Array(13, 2), Array(20, 2), Array(31, 2)), _
            TrailingMinusNumbers:=True
    myEnd:
End Sub

以下是条形码示例,然后是文本到列拆分的外观

FP10SS200011915113111022001131110240004 FP10ss2000  1191511 31110220011 31110240004
FP10D400000031256232508001662325120000  FP10D40000  0031256 23250800166 2325120000
FP10MDA-SS050000207496320374001463203745000 FP10MDA-SS05    0020749 63203740014 63203745000
FP10PCDSS050000005566801250501068012510006  FP10PCDSS0500   0000556 68012505010 68012510006

再次提前感谢各位。 马丁

【问题讨论】:

  • 嗨,马丁,感谢您的提问。条码的长度总是完全相同吗?如果是这种情况,您可以简单地使用IF 逻辑来根据您输入的Len() 确定需要运行哪些代码。最简单的解决方案是将您的代码复制 3 次,然后用 IF 语句将其包围。
  • 我还看到你用记录宏制作了这个宏。这是开始学习如何编写 VBA 代码的好方法。不幸的是,有很多行是您不需要的。这些是大部分ActiveCell 行。
  • 嗨 Luuklag,谢谢。我确实尝试使用 if 和 len() 语句,但我不断收到错误,因为它无法识别它们。我是否认为在每个数组的末尾我会使用“If Len()=39 then go to”
  • 您确定预期结果中的第二行最后一部分没有遗漏一个字符吗?
  • @MartinScott - 正如 Luuklag 所说,宏记录器是一种很棒的 入门方法,可以帮助您了解一般如何 让 Excel 完成您的工作舞蹈。但是,它编写的代码糟糕!它很实用,但很糟糕。这里有很多关于如何避免所有.Activate.Select 语句的问答,它们将使您的代码更加健壮、更易于阅读和更快地执行。继续阅读、学习和学习,很快您将只需使用宏记录器即可准确确定您要应用于某些文本或单元格的颜色组合是什么! (那些还是很奇怪...)

标签: vba excel text-to-column


【解决方案1】:

如果您实现我的 cmets,您的代码将如下所示。

Dim SelectedRange as Range
Dim Cell as Range

Range("B2").Select
        Range(Selection, Selection.End(xlDown)).Select
        Set SelectedRange = Application.Selection
        For each Cell in SelectedRange
            If len(Cell) = 39 Then   'length of first barcode Then
                Cell.TextToColumns Destination:=Range(Cell), DataType:=xlFixedWidth, _
                FieldInfo:=Array(Array(0, 2), Array(10, 2), Array(17, 2), Array(28, 2)), _

                TrailingMinusNumbers:=True

            ElseIf len(Cell) = ?? Then'length second barcode Then
                Cell.TextToColumns Destination:=Range(Cell), DataType:=xlFixedWidth, _
                FieldInfo:=Array(   'Enter array here

                TrailingMinusNumbers:=True

            ElseIf len(Cell) = ?? Then'length third barcode Then
                Cell.TextToColumns Destination:=Range(Cell), DataType:=xlFixedWidth, _
                FieldInfo:=Array(   'Enter array here

                TrailingMinusNumbers:=True
            End If
         Next Cell
    myEnd:
    End Sub

【讨论】:

  • 谢谢 Luuklag,效果很好,我现在可以看到我做错了什么以及需要改进的地方。我一直在学习,多亏你们,我每天都变得更轻松了。
  • 我很乐意提供帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
  • 1970-01-01
  • 2019-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多