我完全没有使用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循环吗?
答案 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