ID 備件名稱 型號 資料代碼
1 電腦 xx1 407001
2 電腦 xx1 407001
3 電腦 xx1 407001
4 電腦 xx2 407002
5 電腦 xx2 407002
6 電腦 xx3 407003
7 電腦 xxx 407004
8 電腦 xxx 407004
大家好,我想用VB,把這些型號相同的自動加上"資料代碼",代碼的規則如上表所示,
電腦所屬的代碼頭綴是: 407(這個是不變的), 然后用VB自動分類,把[型號]相同的加上后綴,后綴從001開始,相同的型號就遞加,遇到不同型號了,就自動從002重新開始遞加.具體效果請看上表的"資料代碼"
這個能否用程式實作?請高人幫下忙,小弟不知從何入手.多謝大家
uj5u.com熱心網友回復:
請參考:Sub test()
Debug.Print GetDataNumber("xx1,xx2,xx1,xx2,xx3,xx4,xx1,xx4,xx5")
End Sub
Function GetDataNumber(ByVal bStr As String) As String
''由于資料不知道來自哪里,暫且認為來自字串,如:xx1,xx2,xx2,xx3,xx4...
''參考Microsoft Scripting Runtime
''bStr可以是排序好的,也可以是凌亂的
Dim w1 As String, i As Long, iDic As New Dictionary, ww
ww = Split(bStr, ",")
For i = 0 To UBound(ww)
w1 = LCase$(ww(i))
If Not iDic.Exists(w1) Then
''如果該型號字典中沒有,則追加,并且用字典的數量+1作為相應的編號
iDic(w1) = "407" & Format$(iDic.Count + 1, "000")
End If
Next
''按照傳入的字串的順序輸出相應的編碼
w1 = ""
For i = 0 To UBound(ww)
w1 = w1 & IIf(w1 <> "", ",", "") & iDic(LCase$(ww(i)))
Next
GetDataNumber = w1 ''回傳對應的編碼字串
iDic.RemoveAll
Set iDic = Nothing
End Function
uj5u.com熱心網友回復:
可以利用 ListBox 控制元件(可設定為 Visibal = False)。假定你的資料已經在記錄集物件 rs 中。
Private Declare Function SendMessagebyString Lib _
"user32" Alias "SendMessageA" (ByVal hWND As Long, _
ByVal wMsg As Long, ByVal wParam As Long, _
ByVal lParam As String) As Long
Private Const LB_FINDSTRINGEXACT = &H1A2 '在 ListBox 中精確查找
Private Sub Command1_Click()
Dim n As Long
List1.Clear
Do Until rs.EOF
n = SendMessagebyString (List1.hWnd, LB_FINDSTRINGEXACT, -1, rs.Fields("型號"))
If n = -1 Then
List1.AddItem rs.Fields("型號")
n = List1.NewIndex
List1.ItemData(n) = 407001 + n
End If
rs.Fields("資料代碼") = List1.ItemData(n)
rs.Update
rs.MoveNext
Loop
End Sub
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/112484.html
標籤:VB基礎類
