You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel带前缀PO编号自动递增宏报错(Run-time error'13')求助

解决VBA中采购订单编号自动递增的类型不匹配错误

你的问题出在采购订单编号是带前缀字母的混合格式(P000001),直接对整个字符串做算术运算或者强行转数值类型都会触发类型不匹配错误,原因如下:

  • 定义为String时,purchnum + 1试图把字符串和数字做加法,VBA无法识别这种操作,报错Run-time error '13'。
  • 定义为Long时,Range("I5")的值是P000001,包含非数字字符,无法转换为长整型,赋值时直接报错。

修正后的宏代码

Sub CreateNewPO()
    Dim currentPO As String
    Dim poNumber As Long
    Dim newPO As String
    
    ' 获取当前PO编号
    currentPO = Range("I5").Value
    ' 提取数字部分(去掉前缀"P")并转为数值
    poNumber = CLng(Mid(currentPO, 2))
    ' 数字加1后,格式化为6位带前导零的字符串,再加上前缀"P"
    newPO = "P" & Format(poNumber + 1, "000000")
    
    ' 清空指定区域内容
    Range("D2:E2,B9,A15:L40").ClearContents
    ' 提示新PO编号
    MsgBox "Your next PO number is " & newPO
    ' 更新单元格中的PO编号
    Range("I5").Value = newPO
    ' 定位到指定单元格
    Range("D2").Select
    
    ' 保存工作簿
    ThisWorkbook.Save
End Sub

关键代码解释

  • Mid(currentPO, 2):从第2个字符开始截取,去掉开头的"P",得到纯数字字符串"000001"。
  • CLng(...):把纯数字字符串转换为长整型数值,方便做加法运算。
  • Format(poNumber + 1, "000000"):把加1后的数字格式化为6位长度,自动补前导零,确保编号格式统一(比如1变成000001,6变成000006)。

内容的提问来源于stack exchange,提问作者Sab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 11:12:04