我有一个包含一个组合框和一个文本框的表单。组合框从只有三个值(JED、RUH 和 DMM)的表中获取数据。我想要的是当用户在组合框中选择三个值中的任何一个时,文本框将自动填充特殊格式的自动编号。例如,如果用户选择 JED,则格式将为 j0000a(“j”:是静态的,它是 JED 的快照,“0000”:是按顺序增加的常规数字,“a”:是永远不会改变的字母除非 0000 达到它的极限女巫是 9999)。请注意,comboBox 中的每个值都有其特殊的自动编号格式,并且是唯一的。
我该怎么做 ?
提前致谢。
问问题
729 次
1 回答
0
如果您将值存储在表中,则下拉列表的 afterupdate() 事件中的一些 VBA 代码会执行此操作。
我会在这里冒昧,因为我不知道你的确切结构。
Table_ABRV
ID | ABRV
1 | JED
2 | RUH
3 | DMM
还有一张桌子。
Table_Auto
ID | CustomID | ABRVID
1 | j0000a | 1
使这项工作的代码是
Private Sub cmbABRV_AfterUpdate()
Dim seed, autoVal, autoRemainder, autoAlpha
'[ABRV][####][a]
seed = DCount("ID", "Table_Auto", "ABRVID = " & DLookup("ID", "Table_ABRV", "ABRV = '" & cmbABRV.Text & "'"))
autoVal = Round(seed / 10000, 0) + 1 'this will be used for the alpha character
autoRemainder = seed Mod 10000 'this will be used for numeric value
autoRemainder = Format(autoRemainder, "000#") 'Add preceeding 0's
autoAlpha = ConvertToLetter(autoVal) 'convert the autoVal to Alpha
txtAuto.Value = Left(cmbABRV.Text, 1) & autoRemainder & autoAlpha 'Create string
End Sub
Function ConvertToLetter(Val) As String
'Convert a letter to a numeric equivalent
Dim iAlpha As Integer
Dim iRemainder As Integer
iAlpha = Int(Val / 27)
iRemainder = Val - (iAlpha * 26)
If iAlpha > 0 Then
ConvertToLetter = Chr(iAlpha + 64)
End If
If iRemainder > 0 Then
ConvertToLetter = ConvertToLetter & Chr(iRemainder + 64)
End If
End Function
从下拉列表中选择一个值后,表单文本框将显示自动编号。
于 2012-08-31T17:46:28.073 回答