取订单号的程序

本文介绍了一段VBA代码,用于从Excel表格中提取特定格式的订单号,并去除非数字及顺序号部分,确保提取出的订单号符合规定格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Option Explicit

Sub 仓库获取客户代码()
    If Worksheets("产品入库序时簿").Range("G1").Value = "收货仓库" Then
        Columns("G:G").Select
        Selection.Insert
    End If

    getSONo "产品入库序时簿", "F", 2, "G", 2
End Sub
Private Function getSONo(xlWsh As String, strRangeIn As String, intRangeIn As Integer, strRangeOut As String, intRangeOut As Integer)
    '定义两个变量存储单元格Range位置编号
    Dim strStartRangeID As String
    Dim strOutputRangeID As String
    Dim strFinalSONo As String
    '定义一个整数变量,存编号到第几行为止
    Dim intStop As Integer
    intStop = ActiveWorkbook.Worksheets(xlWsh).UsedRange.Rows.Count

    '设置输出的那些单元格为文本格式
    ActiveWorkbook.Worksheets(xlWsh).Range(strRangeOut & ":" & strRangeOut).NumberFormatLocal = "@"

    '获取第一个订单编号的ID
    Do While intRangeIn <= intStop
        strStartRangeID = strRangeIn & intRangeIn
        strOutputRangeID = strRangeOut & intRangeOut
        strFinalSONo = ActiveWorkbook.Worksheets(xlWsh).Range(strStartRangeID).Value

        '切掉后面的订单序号
        If Not InStrRev(strFinalSONo, "-") = 0 Then
            strFinalSONo = cutEndSerialNumber(strFinalSONo)
        End If

        '切掉前面的非数字字符
        strFinalSONo = cutLeft(strFinalSONo)
        '切掉后面的
        strFinalSONo = cutRight(strFinalSONo)

        ActiveWorkbook.Worksheets(xlWsh).Range(strOutputRangeID).Value = strFinalSONo

        '继续下一行
        intRangeIn = intRangeIn + 1
        intRangeOut = intRangeOut + 1
    Loop


End Function

Private Function cutEndSerialNumber(SaleNumber As String) As String
    '-----------------截掉字符"-"后面的内容,包括"-"
    '但是如果包含多个"-"的话,每次只能截掉最后一个的
    '比方说cutEndSerialNumber("CHL0010-1-1")运行结果是CHL0010-1
    Dim intPosition As Integer
    intPosition = InStrRev(SaleNumber, "-")

    If intPosition = 0 Then
        cutEndSerialNumber = SaleNumber
        Exit Function
    End If

    Do While Not intPosition = 0
        SaleNumber = Left(SaleNumber, intPosition - 1)
        intPosition = InStrRev(SaleNumber, "-")
    Loop

    cutEndSerialNumber = SaleNumber
End Function
Private Function cutLeft(strInPut As String)
    '如果第一个就是数字的话就没必要切了
    If (Asc(Left(strInPut, 1)) >= Asc("0") And Asc(Left(strInPut, 1)) <= Asc("9")) Or Len(strInPut) = 1 Then
        cutLeft = strInPut
        Exit Function
    End If


    Do While Not (Asc(Left(strInPut, 1)) >= Asc("0") And Asc(Left(strInPut, 1)) <= Asc("9"))
        strInPut = Right(strInPut, Len(strInPut) - 1)
    Loop
    cutLeft = strInPut
End Function
Private Function cutRight(strInPut As String)
    '如果第一个就是数字的话就没必要切了
    If (Asc(Right(strInPut, 1)) >= Asc("0") And Asc(Right(strInPut, 1)) <= Asc("9")) Or Len(strInPut) = 1 Then
        cutRight = strInPut
        Exit Function
    End If



    Do While Not (Asc(Right(strInPut, 1)) >= Asc("0") And Asc(Right(strInPut, 1)) <= Asc("9"))
        strInPut = Left(strInPut, Len(strInPut) - 1)
    Loop
    cutRight = strInPut
End Function

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值