ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2439|回复: 17

[求助] 求大神解决,问题看下面。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-7-22 08:57 | 显示全部楼层 |阅读模式
编号.png

ssss.rar

33.24 KB, 下载次数: 7

TA的精华主题

TA的得分主题

发表于 2018-7-22 09:35 | 显示全部楼层
  1. Private Sub CommandButton1_Click()
  2.     Dim ARR
  3.     Dim N1, X, Y As Long
  4.     Dim SHT1 As Worksheet
  5.     Dim BOX1, BOX2, STRX As String
  6.     Dim BOOL As Boolean
  7.    
  8.     BOX1 = UserForm1.ComboBox1.Value
  9.     BOX2 = UserForm1.ComboBox2.Value
  10.     Set SHT1 = Sheets("成品编号")
  11.    
  12.    
  13.     If BOX1 <> "" And BOX2 <> "" Then
  14.         ARR = Split("A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z", ",")
  15.         BOOL = False
  16.         For X = 0 To UBound(ARR)
  17.             For Y = 0 To UBound(ARR)
  18.                 STRX = BOX2 & BOX1 & ARR(X) & ARR(Y)
  19.                 Set C = SHT1.Range("A:A").Find(STRX, , LOOKAT:=xlWhole)
  20.                 If C Is Nothing Then
  21.                     N1 = SHT1.Cells(65536, 1).End(xlUp).Row + 1
  22.                     SHT1.Cells(N1, 1) = STRX
  23.                     BOOL = True
  24.                     Exit For
  25.                 End If
  26.             Next
  27.             If BOOL = True Then Exit For
  28.         Next
  29.         If BOOL = False Then
  30.            MsgBox "PCB板类型和客户编号:已经全部占用,换个编号试试!"
  31.         End If
  32.     Else
  33.         MsgBox "PCB板类型和客户编号不能为空"
  34.     End If
  35.    
  36. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-7-22 09:35 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
QQ14885553.rar (32.46 KB, 下载次数: 7)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-7-22 09:54 | 显示全部楼层
On Error GoTo Err
   
If Worksheets("成品编号").Range("A:A").Find(what:=Split(m, ",")(1), LookAt:=xlWhole).Column Then Exit Sub

Err:

    Dim mydic As Object, y As Integer, ke As String 在这之上加入上面的代码。

TA的精华主题

TA的得分主题

发表于 2018-7-22 10:02 | 显示全部楼层
  1. Private Sub CommandButton1_Click()
  2.     Dim sBox1 As String, sBox2 As String
  3.     sBox1 = UserForm1.ComboBox1.Value
  4.     sBox2 = UserForm1.ComboBox2.Value
  5.    
  6.     If sBox1 <> "" And sBox2 <> "" Then
  7.         If MsgBox("是否按顺序生产编号?" & Chr(13) & "是,顺序生产编号?" & Chr(13) & "否,随机生成编号", vbYesNo) = vbYes Then
  8.             顺序生成编号 sBox1 & sBox2
  9.         Else
  10.             随机生成编号 sBox1 & sBox2
  11.         End If
  12.     Else
  13.         MsgBox "PCB板类型和客户编号不能为空"
  14.     End If
  15. End Sub
  16. [code]Sub 随机生成编号(ByVal sCodeType As String)
  17.     Dim dicData As Object
  18.     Dim vData As Variant, nRow As Integer, nI As Integer
  19.     Dim sCode As String
  20.    
  21.     Application.ScreenUpdating = False
  22.     sCodeType = "PM001"
  23.     Set dicData = CreateObject("Scripting.Dictionary")
  24.     For nRow = Asc("A") To Asc("Z")
  25.         For nI = Asc("A") To Asc("Z")
  26.             dicData(Chr(nRow) & Chr(nI)) = 0
  27.         Next
  28.     Next
  29.     With Sheet4
  30.         vData = .[A1].CurrentRegion.Value
  31.         For nRow = 2 To UBound(vData)
  32.             If vData(nRow, 1) Like sCodeType & "*" Then
  33.                 sCode = Right(vData(nRow, 1), 2)
  34.                 If dicData.Exists(sCode) Then dicData.Remove sCode
  35.             End If
  36.         Next
  37.         If dicData.Count > 0 Then
  38.             nRow = Int(Rnd() * dicData.Count)
  39.             If nRow = dicData.Count And nRow > 0 Then nRow = nRow - 1
  40.             sCode = sCodeType & dicData.Keys()(nRow)
  41.             .Cells(.Cells.Rows.Count, 1).End(xlUp).Offset(1) = sCode
  42.             MsgBox "新编号是【" & sCode & "】"
  43.         Else
  44.             MsgBox "该编号已经用完!"
  45.         End If
  46.     End With
  47.     Application.ScreenUpdating = True
  48. End Sub

  49. Sub 顺序生成编号(ByVal sCodeType As String)
  50.     Dim vData As Variant, nRow As Integer, nI As Integer
  51.     Dim sCode As String
  52.    
  53.     Application.ScreenUpdating = False
  54.     sCodeType = "PM001"
  55.     With Sheet4
  56.         vData = .[A1].CurrentRegion.Value
  57.         For nRow = 2 To UBound(vData)
  58.             If vData(nRow, 1) Like sCodeType & "*" Then
  59.                 If Right(vData(nRow, 1), 2) > sCode Then sCode = Right(vData(nRow, 1), 2)
  60.             End If
  61.         Next
  62.         If sCode = "ZZ" Then
  63.             MsgBox "该编号已经用完!"
  64.         Else
  65.             If sCode = "" Then
  66.                 sCode = sCodeType & "AA"
  67.             Else
  68.                 nRow = Asc(Left(sCode, 1))
  69.                 nI = Asc(Right(sCode, 1))
  70.                 If nI < Asc("Z") Then
  71.                     nI = nI + 1
  72.                     sCode = sCodeType & Left(sCode, 1) & Chr(nI)
  73.                 Else
  74.                     sCode = sCodeType & Chr(Asc(Left(sCode, 1)) + 1) & "A"
  75.                 End If
  76.             End If
  77.             .Cells(.Cells.Rows.Count, 1).End(xlUp).Offset(1) = sCode
  78.             MsgBox "新编号是【" & sCode & "】"
  79.         End If
  80.     End With
  81.     Application.ScreenUpdating = True
  82. End Sub
复制代码
[/code]

TA的精华主题

TA的得分主题

发表于 2018-7-22 10:03 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
附上附件以供参考

ssss(by.micro).rar

31.4 KB, 下载次数: 2

TA的精华主题

TA的得分主题

发表于 2018-7-22 10:15 | 显示全部楼层
h6t5gfdas.zip (40.12 KB, 下载次数: 5)

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-22 10:18 | 显示全部楼层

代码清晰,高手,谢谢,14885553是你QQ吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-22 10:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
獨一無2 发表于 2018-7-22 09:54
On Error GoTo Err
   
If Worksheets("成品编号").Range("A:A").Find(what:=Split(m, ",")(1), LookAt ...

谢谢,你的方法很好,楼二解决了

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-22 10:25 | 显示全部楼层
microyip 发表于 2018-7-22 10:03
附上附件以供参考

谢谢,楼二解决了,A列如果是空的话会报错
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-10 16:52 , Processed in 0.029351 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表