Excel VBA 文本到列
Excel VBA Text To Columns
早上好,提前致谢,
我正在尝试 运行 一个 VBA 宏,使我的最终用户能够将条形码扫描到 excel 中,然后使用命令按钮将条形码拆分为其组件类型,使用文本到列 vba 宏,然后将其分解为项目、第一页和框中的最后一页。
由于必须在不同位置拆分 3 种不同长度的条形码,作为权宜之计,我在工作簿中创建了 3 个选项卡,以便它们可以扫描和分解项目。
理想情况下,我希望能够在一张工作表上完成所有这些工作,并让编码识别需要拆分的内容和位置。
下面是我必须为其中一个项目工作的编码,但它只识别第一组数组,而不识别后续的 3.Can 谁能告诉我如何添加额外的数组来拆分不同的条形码, 在正确的位置
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
再次感谢大家。
马丁
如果您实施我的评论,您的代码将如下所示。
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
早上好,提前致谢, 我正在尝试 运行 一个 VBA 宏,使我的最终用户能够将条形码扫描到 excel 中,然后使用命令按钮将条形码拆分为其组件类型,使用文本到列 vba 宏,然后将其分解为项目、第一页和框中的最后一页。 由于必须在不同位置拆分 3 种不同长度的条形码,作为权宜之计,我在工作簿中创建了 3 个选项卡,以便它们可以扫描和分解项目。 理想情况下,我希望能够在一张工作表上完成所有这些工作,并让编码识别需要拆分的内容和位置。 下面是我必须为其中一个项目工作的编码,但它只识别第一组数组,而不识别后续的 3.Can 谁能告诉我如何添加额外的数组来拆分不同的条形码, 在正确的位置
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
再次感谢大家。 马丁
如果您实施我的评论,您的代码将如下所示。
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