Office中国论坛/Access中国论坛

标题: 如何把下面这段代码作为函数来处理? [打印本页]

作者: laiguiyou    时间: 2007-8-15 11:59
标题: 如何把下面这段代码作为函数来处理?
Dim a, b, c, d, e, f, g, h, bb, j, k, l, m, n, p, q, R, s, t, u, v, w, X, Y, Z, aa, cc, DD, ee, ff As Single

           Dim pr As Currency
        Dim pr2 As Currency
        pr = Nz(DLookup(Me.工序名称, "产品表查询", "[产品编号]=" & 产品编号.Value), 0)
        pr2 = Nz(DLookup("彩绘单价", "产品表查询", "[产品编号]=" & 产品编号.Value), 0)
        a = DLookup("倍数", "样品计件参数", "[序号] = 1")    '1--2   8倍     彩样
        b = DLookup("倍数", "样品计件参数", "[序号] = 2")    '3--4   6倍     彩样
        c = DLookup("倍数", "样品计件参数", "[序号] = 3")    '5--6   5倍     彩样
        d = DLookup("倍数", "样品计件参数", "[序号] = 4")    '7--10  4倍     彩样
        e = DLookup("倍数", "样品计件参数", "[序号] = 5")    '11--30 3倍     彩样
        f = DLookup("倍数", "样品计件参数", "[序号] = 6")    '31--99 1.5倍   彩样
        g = DLookup("倍数", "样品计件参数", "[序号] = 12")   '100PC以上      彩样
        h = DLookup("倍数", "样品计件参数", "[序号] = 7")    '1--2           白样
        bb = DLookup("倍数", "样品计件参数", "[序号] = 8")     '3--4         白样
        j = DLookup("倍数", "样品计件参数", "[序号] = 9")     '5--6          白样
        k = DLookup("倍数", "样品计件参数", "[序号] = 10")    '7--10         白样
        l = DLookup("倍数", "样品计件参数", "[序号] = 27")    '11--20        白样
        m = DLookup("倍数", "样品计件参数", "[序号] = 28")    '21--30        白样
        n = DLookup("倍数", "样品计件参数", "[序号] = 29")    '31--99        白样
        p = DLookup("倍数", "样品计件参数", "[序号] = 14")    '100以上       白样

        q = DLookup("倍数", "样品计件参数", "[序号] = 22")    '1--2           白坯大线
        R = DLookup("倍数", "样品计件参数", "[序号] = 23")     '3--4          白坯大线
        s = DLookup("倍数", "样品计件参数", "[序号] = 24")     '5--6          白坯大线
        t = DLookup("倍数", "样品计件参数", "[序号] = 25")    '7--10          白坯大线
        u = DLookup("倍数", "样品计件参数", "[序号] = 26")    '11-20          白坯大线
        v = DLookup("倍数", "样品计件参数", "[序号] = 30")     '21--30        白坯大线
        w = DLookup("倍数", "样品计件参数", "[序号] = 25")    '31--99         白坯大线
        X = DLookup("倍数", "样品计件参数", "[序号] = 26")    '100以上        白坯大线
        Y = DLookup("倍数", "样品计件参数", "[序号] = 16")    '1--10          彩绘大线
        Z = DLookup("倍数", "样品计件参数", "[序号] = 17")    '11--30         彩绘大线
        aa = DLookup("倍数", "样品计件参数", "[序号] = 18")   '31--99         彩绘大线
        cc = DLookup("倍数", "样品计件参数", "[序号] = 11")   '100以上        彩绘大线
        ee = DLookup("倍数", "样品计件参数", "[序号] = 21")   '1-99           包装大线
        ff = DLookup("倍数", "样品计件参数", "[序号] = 33")   '100以上         包装大线

        Me.单价 = Nz(DLookup(Me.工序名称, "产品表查询", "[产品编号]=" & 产品编号.Value), 0)

        If [单据类型] = "CH" Then
            '==彩样室=
            If Me.样品单 = True Then
                If Me.[部门] = "8" Then
                    Me.单价 = pr2
                    If Me.订单量 >= 1 And Me.订单量 <= 2 Then                      '1---2
                        Me.单价2 = pr2 * a
                    ElseIf Me.订单量 >= 3 And Me.订单量 <= 4 Then             '3---4
                        Me.单价2 = pr2 * b
                    ElseIf Me.订单量 >= 5 And Me.订单量 <= 6 Then              '5---6
                        Me.单价2 = pr2 * c
                    ElseIf Me.订单量 >= 7 And Me.订单量 <= 10 Then            '7--10
                        Me.单价2 = pr2 * d
                    ElseIf Me.订单量 >= 11 And Me.订单量 <= 30 Then       '11---30
                        Me.单价2 = pr2 * e
                    ElseIf Me.订单量 >= 31 And Me.订单量 <= 99 Then   '31---99
                        Me.单价2 = pr2 * f
                    ElseIf Me.订单量 >= 100 Then                     '100以上
                        Me.单价2 = pr2 * g
                    End If

                ElseIf Me.部门 = "1" Then
                    If Me.订单量 >= 1 And Me.订单量 <= 2 Then
                        Me.单价2 = pr * q
                    ElseIf Me.订单量 >= 3 And Me.订单量 <= 4 Then
                        Me.单价2 = pr * R
                    ElseIf Me.订单量 >= 5 And Me.订单量 <= 6 Then
                        Me.单价2 = pr * s
                    ElseIf Me.订单量 >= 7 And Me.订单量 <= 10 Then
                        Me.单价2 = pr * t
                    ElseIf Me.订单量 >= 11 And Me.订单量 <= 20 Then
                        Me.单价2 = pr * u
                    ElseIf Me.订单量 >= 21 And Me.订单量 <= 30 Then
                        Me.单价2 = pr * v
                    ElseIf Me.订单量 >= 31 And Me.订单量 <= 99 Then
                        Me.单价2 = pr * w
                    ElseIf Me.订单量 > 100 Then
                        Me.单价2 = pr * X
                    End

                  '=白样室=

                ElseIf Me.部门 = "24" Then
                    If Me.订单量 >= 1 And Me.订单量 <= 2 Then
                        Me.单价2 = pr * h
                    ElseIf Me.订单量 >= 3 And Me.订单量 <= 4 Then
                        Me.单价2 = pr * bb
                    ElseIf Me.订单量 >= 5 And Me.订单量 <= 6 Then
                        Me.单价2 = pr * j
                    ElseIf Me.订单量 >= 7 And Me.订单量 <= 10 Then
                        Me.单价2 = pr * k
                    ElseIf Me.订单量 >= 11 And Me.订单量 <= 20 Then
                        Me.单价2 = pr * l
                    ElseIf Me.订单量 >= 21 And Me.订单量 <= 30 Then
                        Me.单价2 = pr * m
                    ElseIf Me.订单量 >= 31 And Me.订单量 <= 99 Then
                        Me.单价2 = pr * n
                    ElseIf Me.订单量 > 100 Then
                        Me.单价2 = pr * p
                    End If
                Else
                    Me.单价2 = pr
                End If
            ElseIf Me.样品单 = False Then   '生产大货
                '=彩样室===
                If Me.[部门] = "8" Then
                    If Me.订单量 >= 1 And Me.订单量 <= 99 Then
                        Me.单价2 = pr * 1.5
                    ElseIf Me.订单量 >= 100 Then
                        Me.单价2 = pr
                    End If
               
                    
                    '==白样==

                ElseIf Me.[部门] = "24" Then
                    Me.单价2 = pr * 1.5
                    '=其它部门
                Else
                    Me.单价2 = pr    '原价
                End If
            End If
        ElseIf [单据类型] = "LL1" Then
            Me.单价2 = pr
        End If

[ 本帖最后由 laiguiyou 于 2007-8-16 08:25 编辑 ]
作者: andymark    时间: 2007-8-15 12:43
代表太长啦,没有说明和要求根本没法入手
作者: eyewitnes    时间: 2007-8-15 13:24
为什么不用select case?
作者: gnoy    时间: 2007-8-15 13:28
既然代码这么死,干嘛不直接建表呢。史上最牛比的程序。效率极低!
作者: fan0217    时间: 2007-8-15 14:35
效率极低!

这话一点不错。
作者: laiguiyou    时间: 2007-8-15 14:41
在生产中,生产大货订单,其计件单价为产品表中对应工序的单价。如果生产的是样品单,在原单价的基础上再乘于倍数。具体倍数在样品计件参数中。(因样品单的订单量很小)


在单价更新窗体里,如果是大货单价,可以直接点更新彩绘单价,更新包装单价和更新外发单价。可是更新样品单价就只能用鼠标单击单价2这样来更新,没效率,(单价为原计件单价,单价2为乘于倍数后的单价。)有没有什么方法象更新彩绘单价一样,点一下就可以了
作者: laiguiyou    时间: 2007-8-15 14:45
请各位高手看一下,如何修改这个或有更好的方法解决这样的问题

[ 本帖最后由 laiguiyou 于 2007-8-15 16:11 编辑 ]
作者: wu8313    时间: 2007-8-15 16:10
原帖由 eyewitnes 于 2007-8-15 13:24 发表
为什么不用select case?

这样的效率应该会提升!
作者: laiguiyou    时间: 2007-8-15 16:22
还有没有更好的方法,做成一个单击事件
作者: laiguiyou    时间: 2007-8-15 17:09
改用select case 好象也没什么感觉
作者: laiguiyou    时间: 2007-8-15 19:14
自已顶.....
作者: t小宝    时间: 2007-8-15 23:23
斗胆说几句,说错了不要见怪
首先,第一行的声明太长了!!!
而且你把从 a 到 ee 全部声明为了 Variant 类型了,如果你想把它们全部声明为 Single,这样声明是错误的。
第二,代码不仅繁琐,还有逻辑问题,看看红色部分。
    If Me.样品单 = False Then
        ……
    Else
        If [单据类型] = "CH" Then
                ……
            If Me.样品单 = True Then
                ……
            ElseIf Me.样品单 = False Then            '这里的样品单还会有False的吗?
                ……
            End If
            ……
        ElseIf [单据类型] = "LL1" Then
            ……
        End If
            ……
    End If
第三,表肯定设计得不好,如能巧妙地设计表和查询,是不用很多代码的。
第四,有很多重复的代码,就考虑使用循环,for...next,do...loop,或使用记录集。
第五,你应该取出代码的一小部分来请教别人,能说明问题就行了,这样的代码会把人吓跑的。
作者: laiguiyou    时间: 2007-8-16 08:20
谢谢大宝的指教,请问,如果把它们全部声明为 Single,为什么会错误,应该如何声明才合理
作者: hi-wzj    时间: 2007-8-16 09:19
代码流程的逻辑性您必须重新梳理一下。由于我对你的流程并不是特别了解,因此给您一个建议:
1、就象12楼说的:me.样品单 问题。
2、不是先读出所有的“样品计件参数”表里的值再去和目前的窗体数据去匹配,而是根据您的参数再用dlookup函数去读取相应的数据。幸好您的“样品计件参数”表里只有近30条记录,如果记录多了,同时使用的人多了,还不把服务器累死了?
3、在“样品计件参数”表中增加“部门”字段,将“订单量”字段分解成“上区间”和“下区间”两个字段。(通过字段类型及窗体代码的控制,也能保证区间输入不出大问题,否则如果操作员给你输入一个"10--8"甚至胡乱输入几个汉字程序竟然也允许通过,那不笑死人了?)这样您只需:
Me.单价2 = pr2 *  DLookup("倍数", "样品计件参数", '" & Me.订单量 & ">=[上区间] and " & Me.订单量 & "<=[下区间]  and [部门]=" & me.部门 & "'")

[ 本帖最后由 hi-wzj 于 2007-8-16 09:25 编辑 ]
作者: laiguiyou    时间: 2007-8-16 09:34
谢谢hi-wzj的好建议,我试试先。应该会很好的
作者: laiguiyou    时间: 2007-8-16 10:22
谢谢hi-wzj的好建议,我试试先。应该会很好的
作者: laiguiyou    时间: 2007-8-16 10:23
Me.单价2 = pr2 *  DLookup("倍数", "样品计件参数", '" & Me.订单量 & ">=[上区间] and " & Me.订单量 & "<=[下区间]  and [部门]=" & me.部门 & "'")
这句好象有问题
作者: gnoy    时间: 2007-8-16 12:04
你直接建一个报价倍数表不就完了吗
部门  单据类型 工序  订货上限  下限 倍数
作者: laiguiyou    时间: 2007-8-16 13:31
是的,我已建好,代码是少了很多只用这个就可以了
Dim pr As Currency
    Dim pr2 As Currency

    Me.单价 = Nz(DLookup(Me.工序名称, "产品表查询", "[产品编号]=" & 产品编号.Value), 0)




    If [单据类型] = "CH" Then



        If Me.样品单 = True Then

            pr = Nz(DLookup(Me.工序名称, "产品表查询", "[产品编号]=" & 产品编号.Value), 0)
            pr2 = Nz(DLookup("彩绘单价", "产品表查询", "[产品编号]=" & 产品编号.Value), 0)


            If Me.部门 = 8 Then

                Me.单价2 = pr2 * DLookup("倍数", "样品计件参数", "[上区间]<= " & Me.订单量 & " And [下区间]>=" & Me.订单量 & " And [部门] = " & Me.部门 & "")

            Else
                Me.单价2 = pr * DLookup("倍数", "样品计件参数", "[上区间]<= " & Me.订单量 & " And [下区间]>=" & Me.订单量 & " And [部门] = " & Me.部门 & "")
            End If
        End If

    End If

但更新单价不能一次完成,须手工一个一个更新。不会用记录集。
现在是放在单价2的获得焦点事件中,如果用一个按钮点一下就好了




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3