如何使用VBA Access在文本框中分配下一个递增的字母数字字符串值?

时间:2018-04-20 05:00:10

标签: vba ms-access access-vba

目前,我有一个数据表,其中包含以下数据作为示例:

FieldOne       FieldTwo
TestOne.01     TestOne.01.01
TestOne.01     TestOne.01.02
TestTwo.02     TestTwo.02.01
TestThree.03   TestThree.03.03
TestFour.02    TestFour.02.02
TestFour.02    TestFour.02.03

我有一个包含组合框的表单。组合框的值是 FieldOne 中的所有值。我也想在同一个表单上有一个文本框,在从组合框中选择一个值后,将该特定记录的 FieldTwo 中的下一个递增值分配到文本框中。

例如,如果我从组合框中选择值TestThree.03,我想用TestThree.03.04填充文本框。如果我选择值TestTwo.02,则应使用TestTwo.02.02

填充文本框

到目前为止,我试图开始使用它:

Dim frmDS As SubForm
Dim criteria As String

Set frmDS = getSubForm("form", "datasheet")

criteria = "FieldOne = '" & Me.comboBox & "'"

With frmDS.Form
    .RecordsetClone.FindFirst criteria

    If Not .RecordsetClone.NoMatch Then
        MsgBox .RecordsetClone.Fields("FieldTwo")
    End If
End With

但是我面临两个难题:

  1. 如果我选择TestOne.01,由于有2条记录包含TestOne.01,因此会显示TestOne.01.01而不是最后TestOne.01.02 < / LI>
  2. 我不确定如何在 FieldTwo 的值中最右侧小数点后提取数字,将其递增,然后将其追加到值中 FieldOne ,以便可以将其分配到文本框
  3. 我不确定我最初的方法是否正朝着正确的方向前进。

    我如何克服这些问题?

    由于

1 个答案:

答案 0 :(得分:1)

对于问题1 ,答案很简单

而不是.RecordsetClone.FindFirst criteria

使用.RecordsetClone.FindLast criteria

对于问题2 ,您只需要一些VBA代码即可首先获取最后一个代码,然后将其格式化为追加。

您没有提供格式化的所有细节,因此我假设最简单的解决方案 - 即最后一个代码长度为2位数。如果不是,您可以使用Instr和Mid或Right函数的变体来查找最后一个代码

示例:

Dim intLastCode as Integer
Dim strLastCode as String

With frmDS.Form
    ' Get last two digits from Field 2
    strLastCode = Right(.RecordsetClone.Fields("FieldTwo"),2)
    intLastCode = CInt(strLastCode) + 1

    ' Format and append incremented value to Field 1
    MyTextBox.Value = .RecordsetClone.Fields("FieldOne") & "." & Format(intLastCode,"00")
End With