Office中国论坛/Access中国论坛

标题: 谁有VBA学习资料,给咱发一份. [打印本页]

作者: wangxy689    时间: 2011-3-8 21:56
标题: 谁有VBA学习资料,给咱发一份.
本帖最后由 wangxy689 于 2011-5-11 23:05 编辑

谁有VBA学习资料,给咱发一份.
作者: roych    时间: 2011-3-9 00:37
本帖最后由 roych 于 2011-3-9 01:03 编辑

俺的想法是,先随机抽取5项20%的数据,再据此做联合查询,从而得到每项均20%的数据……
[attach]45059[/attach]
或许子查询也是个不错的想法吧,不过暂没时间去想。不知道老汉版主有没有更高明的办法,人家可是指定您来回答的了,别让LZ失望噢。

PS:
好像理解错题意了。这里只是对5项分别取各抽样20%,不一定每个工号都是平均的(如果非要这么细化,LZ不如用Excel处理,按工号排序后用数据透视表试试看?) ,再说了,某些员工只有一项,怎么可能都有20%呢?(*^__^*) 嘻嘻……

作者: todaynew    时间: 2011-3-9 08:21
wangxy689 发表于 2011-3-8 21:56
我这个问题是一个单位有20多个人对应各自的受理工号,公司的受理类型有5种(退货型、换货型、维修保养型、维 ...

[attach]45061[/attach]

[attach]45060[/attach]

作者: todaynew    时间: 2011-3-9 08:30
roych 发表于 2011-3-9 00:37
俺的想法是,先随机抽取5项20%的数据,再据此做联合查询,从而得到每项均20%的数据……

或许子查询也是个 ...

Sub 抽样查询()
Dim ssql As String
Dim n As Long
Dim i As Long
Dim j As Long
Dim str As String
Dim strwh As String
If IsNull(Me.年度.Value) = False And IsNull(Me.月度.Value) = False And IsNull(Me.抽样比率.Value) = False Then
    ssql = "DELETE * from 临时表"
    CurrentDb.Execute ssql
    str = "ID, 流水序列号, 产品单号, 客户姓名, 预估金额, 给付方式, 受理类型, 受理员工号, 申请时间"
    For i = 0 To Me.受理类型.ListCount - 1
        For j = 0 To Me.受理员工号.ListCount - 1
            strwh = "year(申请时间)=" & Me.年度.Value
            strwh = strwh & " and month(申请时间)=" & Me.月度.Value
            strwh = strwh & " and 受理类型='" & Me.受理类型.Column(0, i) & "'"
            strwh = strwh & " and 受理员工号='" & Me.受理员工号.Column(0, j) & "'"
            n = Round(DCount("*", "日常数据", strwh) * Me.抽样比率.Value, 0)
            If n > 0 Then
                ssql = "INSERT INTO 临时表 ( " & str & " ) "
                ssql = ssql & "SELECT TOP " & n & " " & str
                ssql = ssql & " FROM 日常数据 "
                ssql = ssql & "WHERE " & strwh
                ssql = ssql & " ORDER BY Rnd([ID])"
                CurrentDb.Execute ssql
            End If
        Next
    Next
Else
    MsgBox "请选择抽样查询年度、月度、抽样比率!"
End If
End Sub

如果对数量极少的抽样样本,可以考虑将n设置为如下:

n = Int(DCount("*", "日常数据", strwh) * Me.抽样比率.Value) - (DCount("*", "日常数据", strwh) * Me.抽样比率.Value - Int(DCount("*", "日常数据", strwh) * Me.抽样比率.Value) > 0)


这样可以保证最少抽到一条记录。
作者: roych    时间: 2011-3-9 09:18
回复 todaynew 的帖子

子查询试了一下,感觉运行较慢。看来除了编程,貌似没有更好的办法了。
作者: wangxy689    时间: 2011-3-9 18:58
太感谢了,让我困惑了好久的问题终于解决了,我一定要在论坛上好好跟老师学,谢谢了。
作者: wangxy689    时间: 2011-3-10 21:13
本帖最后由 wangxy689 于 2011-3-10 21:18 编辑

[attach]45077[/attach]今天我在老师做的窗体上增加了两个按钮,其中一个按钮时导出EXCEL表格,我是用宏做的 OutputTo,出现的问题是虽然导出了EXCEL表格,但是不是子窗体上的记录,是全部记录。老师帮我看看是什么原因,请教教我把。
作者: 石三少    时间: 2011-3-11 09:03
用了个红尘的通用导出函数
作者: todaynew    时间: 2011-3-11 09:32
本帖最后由 todaynew 于 2011-3-11 09:34 编辑
wangxy689 发表于 2011-3-10 21:13
今天我在老师做的窗体上增加了两个按钮,其中一个按钮时导出EXCEL表格,我是用宏做的 OutputTo,出现的问题是 ...


有十多种处理类似问题的方法。
最简单的可以看看红尘如烟关于用查询导入导出的方法。地址:http://www.office-cn.net/forum-viewthread-tid-93430-highlight-%D2%BB%BE%E4%B2%E9%D1%AF%B4%FA%C2%EB%CA%B5%CF%D6Excel%CA%FD%BE%DD%B5%BC%C8%EB%B5%BC%B3%F6.html
作者: 石三少    时间: 2011-3-11 09:41
老头真是精神好啊!
作者: roych    时间: 2011-3-11 13:32
对比一下以下两张图片的不同就知道了:
这是LZ原先的宏——
[attach]45087[/attach]
这是Roy修改后的宏——
[attach]45089[/attach]

作者: wangxy689    时间: 2011-3-13 19:26
回复 roych 的帖子

我按照你说的试了一下,导出来的表格中的记录还是全部记录,不是子窗体中显示的记录。
作者: roych    时间: 2011-3-13 21:15
你需要刷新下数据(即Requery)再执行导出动作的。
[attach]45106[/attach]

作者: mybigeng    时间: 2011-3-14 14:21
学习了,感谢
作者: wangxy689    时间: 2011-3-17 07:13
谢谢老师,我试了试成功了。感谢!




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