设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
楼主: kent_73
打印 上一主题 下一主题

[窗体] 在打开EXCEL后,标注休息日的速度很慢,帮我优化一下吧

[复制链接]
11#
发表于 2012-7-12 14:43:08 | 只看该作者
本帖最后由 todaynew 于 2012-7-12 14:43 编辑
kent_73 发表于 2012-7-12 13:53
我的格式中,有多个部门,每个部门的每个合同都有好几个数据,怎么放到报表中啊
我把需要导出的数据放 ...


你可以先按照需要的格式做出对应的查询来,如果查询很麻烦,可以先设一个对应报表格式的数据表,用ADO将需要的数据读入到该表中,然后以该表作为报表的数据源即可。

这样处理是和向Excel导出数据是一个道理,无非是接收数据的对象从Excel表转为了一个查询或者一个临时数据表而已。
12#
 楼主| 发表于 2012-7-12 16:10:30 | 只看该作者
todaynew 发表于 2012-7-12 15:57
鬼打架,你的实例中没有其他表,没法帮你折腾。

实际上就是一个简单的交叉查询做报表的数据源而已。

没有表?应该有二个表呀,在14楼的附件中
附件中的ACCESS中有二个表,1、Tb_工厂日历(这是工厂定的作息时间);2、Tb_计划_主表

是否为休息日要看表:Tb_工厂日历和国家的法定假日(指星期日,呵呵,采用综合工时,星期六要加班的),这里用字体颜色和底纹区分

需要的计划数据都在表:Tb_计划_主表 中。

再次上传附件


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
13#
 楼主| 发表于 2012-7-12 15:42:57 | 只看该作者
todaynew 发表于 2012-7-12 14:43
你可以先按照需要的格式做出对应的查询来,如果查询很麻烦,可以先设一个对应报表格式的数据表,用ADO将 ...

像这样的格式怎么样在ACCESS中做查询啊
我不会做,辛苦版主帮做一个吧
谢谢了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
14#
发表于 2012-7-12 12:00:53 | 只看该作者
这是在ACCESS里的代码,大概需要8秒可以执行完毕:
替换你的代码就可以了:

Dim xlApp As New Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As New Excel.Worksheet
Dim Rs As New ADODB.Recordset, conn
Dim i As Integer, j As Integer, n As Integer
Dim mydb As ADODB.Connection, c2, SQL As String
Dim TargetR, stime
Set mydb = CurrentProject.Connection
stime = Timer
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open(CurrentProject.Path & "\计划.xlt")
Set xlSheet = xlBook.Worksheets(1)
Set conn = CurrentProject.Connection
xlApp.ScreenUpdating = False
With xlSheet
Set TargetR = .Range("A1:AG300")
    For n = 1 To 33
    For i = 1 To 330
   'MsgBox TargetR(i, n)
    If IsDate(TargetR(i, n)) = True Then
    If Nz(DCount("[日期]", "Tb_工厂日历", "[日期]=#" & TargetR(i, n) & "# AND [是否休息]=-1"), 0) > 0 Then
    .Cells(i, n).Font.ColorIndex = 3  '符合条件的用红色字体表示
    ElseIf Weekday(TargetR(i, n)) = 7 Then
    .Cells(i, n).Interior.ColorIndex = 15  '星期日用灰色底纹表示
    Else
     .Cells(i, n).Interior.ColorIndex = 2
    End If
    End If
    Next i
    Next n
xlApp.ScreenUpdating = True
End With
xlApp.Visible = True
'MsgBox Round(Timer - stime, 2)

15#
发表于 2012-7-12 12:02:19 | 只看该作者
设xlApp.Visible =False 大概可以省一半的时间
{:soso_e100:}
16#
 楼主| 发表于 2012-7-12 12:08:46 | 只看该作者
谢谢了,我试试
17#
发表于 2012-7-12 12:38:32 | 只看该作者
本帖最后由 Benjamin_luk 于 2012-7-12 12:39 编辑

Weekday(TargetR(i, n)) = 7, 实际上是周六,因为你没有指定一周开始的第一天是周几
默认是从周日开始的,所以
Weekday(TargetR(i, n)) = 1 才是周日
你自己改一下.
18#
发表于 2012-7-12 15:57:00 | 只看该作者
本帖最后由 todaynew 于 2012-7-12 16:00 编辑
kent_73 发表于 2012-7-12 15:42
像这样的格式怎么样在ACCESS中做查询啊
我不会做,辛苦版主帮做一个吧
谢谢了


鬼打架,你的实例中没有其他表,没法帮你折腾。

实际上就是一个简单的交叉查询做报表的数据源而已。
19#
 楼主| 发表于 2012-7-12 16:02:58 | 只看该作者
Benjamin_luk 发表于 2012-7-12 15:54
改为并列的条件就可以了,差不多要8秒
Dim xlApp As New Excel.Application
Dim xlBook As Excel.Workbo ...

现在对了,谢啦
20#
 楼主| 发表于 2012-7-12 07:55:31 | 只看该作者
Benjamin_luk 发表于 2012-7-11 16:52
给你个思路:
1.在EXCEL表中用代码读取MDB的工厂日历
2.用代码进行EXCEL标注,记得头尾加上Application.Scr ...

我需要从二个方面读取假期的信息:1、MDB中的工厂日历;2、一年中的星期日
现在是能够完成,只是用for循环,速度慢了,请帮我用数组写个示例吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-22 17:17 , Processed in 0.177657 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表