Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

[5分]通过VBA代码.原材料类型选择不同类型,采购单号按不同格式输入

zyq  发表于:2013-03-27 22:46:19  
复制

通过VBA代码.原材料类型选择不同类型,采购单号按不同格式输入.

 

 

 

在ACCESS窗体的VBA代码中。

 

Top
杜超-2号 发表于:2013-03-27 22:51:19
根据两个字段自动生成编号示例\双字段编号[Access软件网]
http://www.accessoft.com/article-show.asp?id=7904

殷小宝 发表于:2013-03-28 22:57:51

prefixal=HYPY([原材料类型])

me.采购单号=AutoNumbtr("采购表","采购单号",3,"yyyy")

Function HZPY(hzstr As String) As String

Dim p0 As String, C As String, str As String

Dim I As Integer, J As Integer

p0 = "吖八嚓咑妸发旮铪讥讥咔垃呣拿讴趴七呥仨他哇哇哇夕丫匝咗"

For I = 1 To Len(hzstr)

    str = Mid(hzstr, I, 1)

    If Asc(str) > 0 Then

        C = str

    Else

        For J = 1 To 26

            If Mid(p0, J, 1) > str Then

                C = Chr(63 + J)   

                Exit For

            End If

        Next

    End If

    HZPY = HZPY + C

Next

End Function

Public Function AutoNumStr(TableName As String, _

                           FieldName As String, _

                           Digit As Integer, _

                           Optional Prefixal As String, _

                           Optional DateFormat As String)

    On Error GoTo ErrorHandler

    Dim strPrefixal As String

    Dim strTemp  As String

    strPrefixal = Prefixal

    If DateFormat <> "" Then strPrefixal = strPrefixal & Format(Date, DateFormat)    前缀加日期格式

    If strPrefixal <> "" Then strTemp = "[" & FieldName & "] Like '" & strPrefixal & "*'"   前缀加日期格式放在前面,[" & FieldName & "]为字段值。如:XS*

 

    strTemp = Nz(DMax(FieldName, TableName, strTemp), "0")    获得最大的字段名

    strTemp = Val(Mid(strTemp, Len(strPrefixal) + 1)) + 1    '前缀为5位,那么从第六位开始,剔除前缀,取得后面的数加1

    strTemp = Format(strTemp, String(Digit, "0"))  格式里strTemp已经是最大的数加1了,在这里尚需设定格式.

    AutoNumStr = strPrefixal & strTemp

Done:

    Exit Function

ErrorHandler:

    MsgBox "错误编号:  #" & Err & vbCrLf & _

           "错误来源:  " & Err.Source & vbCrLf & _

           "错误信息:  " & Err.Description, vbCritical, "出错"

    Resume Done

End Function




殷小宝 发表于:2013-03-28 22:59:23

prefixal=HYPY([原材料类型])

Me.采购单号=AutoNumbtr("采购表","采购单号",3,prefixal,"yyyy")



煮江品茶 发表于:2013-03-29 14:26:24

无需那么复杂,简单点搞一下就可以了:

function strNum(byval str as string,byval myDate as Date) as string
    dim strwh as string
    strwh="采购单号 Like "
    select case str
      case "原材料"
         strwh=strwh & "YCL*"
      case "外购件"
         strwh=strwh & "WGJ*"
      case "自产品"
         strwh=strwh & "ZCP*"
      case "进口件"
         strwh=strwh & "JKJ*"
    end select
    strwh=strwh & " and year([采购日期])=" & year(nz(myDate,Date()))
    strNum=nz(Dmax("采购单号","阁下的数据表名称",strwh),year(myDate) & "000")
    strNum=year(myDate) & format(val(Right(strNum,3))+1,"000")
end function

 



殷小宝 发表于:2013-03-30 12:46:34

对楼上稍作修改:

Function strNum(ByVal str As String) As String

    Dim strwh As String

    strwh = "采购单号 Like """

    Select Case str

      Case "原材料"

         strwh = strwh & "YCL*"""

      Case "外购件"

         strwh = strwh & "WGJ*"""

      Case "自产品"

         strwh = strwh & "ZCP*"""

      Case "进口件"

         strwh = strwh & "JKJ*"""

    End Select

     strNum = DMax("采购单号", "采购表", strwh)

    strNum = strNum & Format(Val(Right(strNum, 3)) + 1, "000")

End Function


Private Sub 原材料类型_AfterUpdate()

Me.采购单号 = strNum(Me.原材料类型)

End Sub



总记录:5篇  页次:1/1 9 1 :