尝试使用vba自动拆分excel中的数据

时间:2011-11-30 17:24:00

标签: windows excel vba

我完全没有使用excel vba编程的经验,除了我写了一个函数来添加数据标记到几周前在我们的生产线上扫描的条形码,主要是通过反复试验。

无论如何,我现在需要帮助的是库存即将到来,我们拥有的每个项目都有条形码,通常会扫描到记事本中,然后手动拉入excel并使用“text to columns”。我找到了excel split功能,希望能够帮助我使用我的扫描条形码。

数据格式为: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 个答案:

答案 0 :(得分:2)

如果您想在输入条形码时自动处理条形码,您需要这样的东西(进入工作表模块)。

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

答案 1 :(得分:2)

将代码添加到工作表后面的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
相关问题