【问题标题】:Excel VBA Inventory sortingExcel VBA 库存排序
【发布时间】:2014-11-05 02:20:34
【问题描述】:

我正在尝试使库存扫描过程变得简单一些。 我们扫描进货。扫描器会向 Excel 发送一个字符串,例如 'XYZ123'。 我想要做的是,而不是用户手动选择列,我希望 excel 将扫描的字符串发送到相应的列。 例如,假设有 3 个可能的列 'PO''Item''SN'

  • PO 将以 'XYZ' 开头
  • Item 将以 'ABC' 开头
  • SN'LMN' 开头

如果扫描的值以'ABC' 开头,则必须将其发送到'Item' 列。

这可能吗?我尝试使用 Search、Exact 和其他一些公式,但到目前为止没有任何效果。

谢谢,

【问题讨论】:

  • 你不能用公式来做到这一点——你需要使用 VBA。您可以使用Worksheet_Change 事件处理程序来检查已扫描的值并将其复制到所需位置。
  • 我看不到 Excel 被用作实时更新类型系统,如果这是您想要的。我过去制作过 Worksheet_Change 解决方案,随着时间的推移,新用户或未启用宏等可能会导致维护问题。也许您可以将它们全部扫描到一列并在工作结束时将它们分开?您可以创建一个桶公式,它是 IF(LEFT(A1,3)="XYZ","PO","")&IF(LEFT(A1,3)="ABC","SN","") 的串联以进行分组。
  • 扫描仪如何将字符串发送到 Excel?您可能需要在该步骤中分析字符串,然后从那里将其发送到相应的列。

标签: excel vba


【解决方案1】:
Sub test_inventory_sorting()
  Dim v_arr(1 To 3) As String, v As Variant
  v_arr(1) = "XYZ1234"
  v_arr(2) = "LMN73456"
  v_arr(3) = "ABCzxcv"

  For Each v In v_arr
    Debug.Print v; " goes to "; get_col(CStr(v))
  Next v
End Sub
Function get_col(ByVal p_val As String) As String
  If p_val Like "ABC*" Then
    get_col = "SN"
  ElseIf p_val Like "LMN*" Then
    get_col = "Item"
  ElseIf p_val Like "XYZ*" Then
    get_col = "PO"
  Else
    get_col = "Invalid"
  End If
End Function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-07
    • 2011-10-04
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多