Access交流中心

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

回复 加入收藏帖  复制
我要提问 帖子上移

能简化这个条件吗

半夜罗 等级: 一星会员 积分:206 金币:1240 来自:成都Access交流中心 发表于:2019-01-25 15:14:02   已结帖
楼主

请教各位老师,下面代码中的红色部分是一个比较有规律的数字,能将其简化成类似Excel中的(6:8;16:20)吗?能简化的话请写一下, 谢谢!

Public Function 计算单位成本()

    Dim rst As DAO.Recordset       
    Dim rs累计数量 As Currency   
    Dim b As Currency   
    If (Not IsNull(DLookup("累计数量", "损益表", "id=1"))) Then
        Set rst = CurrentDb.OpenRecordset("SELECT * FROM 损益表 ORDER BY id", dbOpenDynaset)
        rst.MoveFirst    
        rs累计数量 = DLookup("累计数量", "损益表", "id=1")
        Do While Not rst.EOF   
            rst.Edit
            If rst!id = 6 Or rst!id = 7 Or rst!id = 8 Or rst!id = 16 Or rst!id = 17 Or rst!id = 18 Or rst!id = 19 Or rst!id = 20 Then
                b = (rst!累计金额 / rs累计数量) * 1000
                rst!单位成本1 = b
            End If
            rst.Update
            rst.MoveNext
        Loop
        rst.Close   
        Set rst = Nothing    
    End If
End Function

 

access培训  诚聘access开发人员

    半夜罗
      获得社区协助:请教问题(即发帖)67篇,其中获得解决的59篇;
      协助社区成员:协助他人(即回帖)60篇,其中被设为【最佳答案】的16篇;
      协助我们社区:发布技术文章31篇,邀请了0名新会员注册本社区(如何邀请会员注册,详见:http://www.accessoft.com/sitehelp.asp)。
Top

扫描下方工作人员的微信二维码加微信,邀您加入Access课堂微信群,进入一个技术交际圈:

网站工作人员微信

西出阳关无故人 等级:版主★★★★★ 积分:571 金币:120 来自:安顺Access交流中心 发表于2019/1/25 16:32:45 最佳答案
1楼 得分: 2

首先自定义一个函数(基于给定的固定数据):

Public Function inArray(ByVal inid As Long) As Boolean
    Dim ary As Variant
    ary = Array(6, 7, 8, 16, 17, 18, 19, 20)'这里你可以添加更多的条件
    inArray = False
    For i = 0 To UBound(ary)
        If inid = ary(i) Then
            inArray = True
            Exit For
        End If
    Next
End Function
然后把你的if...改为:

if inArray(rst!id)=true then

               b = (rst!累计金额 / rs累计数量) * 1000
                rst!单位成本1 = b

end if

另外,你也可以把条件放在表中,然后用dlookup函数来判定是够符合条件,这种方式更灵活

条件表的字段

id  自动编号

条件  长整型

然后自定义函数:

Public Function InList(ByVal inLong As Long) As Boolean
    Dim rst As Recordset
    If Nz(DLookup("id", "条件表", "条件=" & inLong), 0) = 0 Then'这里获取id,是因为id为自动编号,且永远大于零的特征。
        InList = False
    Else
        InList = True
    End If
End Function

然后把你的if...改为:

if InList(rst!id)=true then

               b = (rst!累计金额 / rs累计数量) * 1000
                rst!单位成本1 = b

end if





    很高兴与您就本帖子进行交流,如果我的回答已经解决了您的问题,请点击上方的“最佳答案”,这样本帖子就不会在“待解决问题区”显示了,我也将获得2个积分奖励,并不会减少您的积分!
    西出阳关无故人
      获得社区协助:请教问题(即发帖)18篇,其中获得解决的9篇;
      协助社区成员:协助他人(即回帖)804篇,其中被设为【最佳答案】的206篇;
      协助我们社区:发布技术文章3篇,邀请了0名新会员注册本社区(如何邀请会员注册,详见:http://www.accessoft.com/sitehelp.asp)。
半夜罗 等级:一星会员 积分:206 金币:1240 来自:成都Access交流中心 发表于2019/1/25 20:00:55 
2楼 得分: 0
谢谢老师!

    半夜罗
      获得社区协助:请教问题(即发帖)67篇,其中获得解决的59篇;
      协助社区成员:协助他人(即回帖)60篇,其中被设为【最佳答案】的16篇;
      协助我们社区:发布技术文章31篇,邀请了0名新会员注册本社区(如何邀请会员注册,详见:http://www.accessoft.com/sitehelp.asp)。
总记录:2篇  页次:1/1 9 1 :
您还没有在Access软件网登录不能回复帖子
  • 你没有登录,请点击后面链接登录:登录
  • 如果你没有注册,请点击后面链接注册:注册,注册完成后,请再次访问本页功能。