自动创建唯一ID

时间:2014-03-08 17:41:05

标签: excel vba excel-vba

我仍然是一个新手,所以如果我问一个愚蠢的问题,那就好了,但这是我目前的问题。我开始使用用户表单为数据输入在excel中创建一个大型归档集合的数据库。简单的一点是,为了帮助识别集合中的每个项目,我想为每个项目提供自己的ID。更难的是我希望ID还包含一个前缀,以便清楚它是什么类型的项目。例如,以下前缀;

Description  |  Prefix
-----------------------
Newsletter   |  NEW

Minutes      |  Min

Photograph   |  Pho

并且要添加的挑战是让ID在其自己的前缀下是顺序的(尽管它们没有被分组在一起)所以ID列表可能最终会像这样;

NEW1
NEW2
PHO1
PHO2
PHO3
MIN1
NEW3
MIN2

如果您能提出任何建议来帮助我实现这一目标,我将非常感激。提前谢谢。

2 个答案:

答案 0 :(得分:2)

这假设一个Listbox表单有三个选项,Button生成下一个记录ID,Textbox显示它。

它假定在激活表单时现有ID位于ActiveSheet的A列中:

Private Sub UserForm_Activate()
With Me.ListBox1
    .AddItem "PHO"
    .AddItem "NEW"
    .AddItem "MIN"
End With
End Sub

Private Sub CommandButton1_Click()
Dim ws As Excel.Worksheet
Dim Category As String

Set ws = ActiveSheet
Category = Me.ListBox1.Value
Me.TextBox1 = Me.ListBox1 & Application.Evaluate("=MAX(IFERROR(SUBSTITUTE('" & ws.Name & "'!A1:A10," & """" & Category & """" & ","""")*1,0))") + 1
End Sub

它使用Application.Evaluate,它评估数组公式,就好像它已输入单元格一样。如果将公式输入单元格并且A1:A10中有值,并且您在列表框中选择了“NEW”,则它将如下所示:

enter image description here

以下是表格中的结果:

enter image description here

答案 1 :(得分:0)

在数据库中,最好让您的ID代码完全没有意义。也就是说,不要将“项目类型”包含在您的唯一ID中。它应该是一个自己的领域。 ID代码应该 多于唯一标识符。