设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

123下一页
返回列表 发新帖
查看: 3279|回复: 21
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
1#
发表于 2012-7-11 16:31:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在打开EXCEL后,标注休息日的速度很慢,帮我优化一下吧
谢谢

本帖子中包含更多资源

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

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享分享 分享淘帖 订阅订阅
2#
发表于 2012-7-11 16:52:27 | 只看该作者
本帖最后由 Benjamin_luk 于 2012-7-11 16:53 编辑

给你个思路:
1.在EXCEL表中用代码读取MDB的工厂日历
2.用代码进行EXCEL标注,记得头尾加上Application.ScreenUpdating = false, Application.ScreenUpdating = True
3.将Excel的区域转存到数组中,这样代码处理会快很多
3#
发表于 2012-7-11 21:21:32 | 只看该作者
本帖最后由 roych 于 2012-7-12 01:48 编辑

个人建议不必在Access中处理,而是考虑在Excel中处理。
1、用Weekday函数可以有效地查找到周末。
2、个别传统节日可以通过内置数据来完成。
详细看附件吧~~~不知道附件中讲清楚了没有。如果还不理解,就去http://www.office-cn.net/thread-113291-1-1.html看看{:soso_e128:}

本帖子中包含更多资源

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

x
4#
发表于 2012-7-11 17:08:41 | 只看该作者
不要Excel表不就完事了,直接在Access中完成报表即可。
5#
发表于 2012-7-12 17:42:41 | 只看该作者
kent_73 发表于 2012-7-12 16:10
没有表?应该有二个表呀,在14楼的附件中
附件中的ACCESS中有二个表,1、Tb_工厂日历(这是工厂定的作息 ...

建一个临时表,向临时表写入数据(写入临时表的逻辑与写入Excel表相同),并用临时表做报表数据源。

本帖子中包含更多资源

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

x
6#
发表于 2012-7-12 15:54:20 | 只看该作者
kent_73 发表于 2012-7-12 13:28
导出的结果不对啊

改为并列的条件就可以了,差不多要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 300
   '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  '符合条件的用红色字体表示
    Else
     .Cells(i, n).Interior.ColorIndex = 2
    End If
    If Weekday(TargetR(i, n)) = 1 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)
7#
发表于 2012-7-12 16:11:39 | 只看该作者
你可以在
.Cells(i, n).Interior.ColorIndex = 2
后面加上:
.Cells(i, n).Font.ColorIndex = 1
将字体改为黑色.
{:soso_e100:}
8#
 楼主| 发表于 2012-7-12 13:53:30 | 只看该作者
todaynew 发表于 2012-7-12 12:47
当然可以,犯不着在Excel中折腾一遍。


我的格式中,有多个部门,每个部门的每个合同都有好几个数据,怎么放到报表中啊
我把需要导出的数据放上来,帮我做个示例吧。谢谢

需要导出的表是:Tb_计划_主表
需要导出的字段是:合同号、样板、合同数量、日产量、产品号、预计到货日、产品完成日、交货期
已禁用的数据不导出
日期必须是整月的
将属于休息日的日期,在工厂日历中为休息日的,用红色字体;属于法定假日的,用灰色底纹表示。

如需要导出的数据的【预计投入日】为1月的话,生产部门是【A】(生产部门如果是【B】的话,按照下面的行号+8,即:合同号——C14~AG14……)
导出的数据对应在EXCEL中所处的位置:合同号——C6~AG6
                                                                样板——C7~AG7
                                                               合同数量——C8~AG8
                                                               日产量——C9~AG9
                                                               产品号——C10~AG10
                                                               预计到货日——C11~AG11
                                                              产品完成日——C12~AG12
                                                               交货期——C13~AG13


本帖子中包含更多资源

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

x
9#
发表于 2012-7-12 12:47:15 | 只看该作者
kent_73 发表于 2012-7-12 07:56
因为需要导出到特定的格式中,所以做了一个EXCEL模板。
如果在ACCESS中生成报表的话,能得到如我附件中的 ...

当然可以,犯不着在Excel中折腾一遍。

10#
 楼主| 发表于 2012-7-12 13:28:25 | 只看该作者
Benjamin_luk 发表于 2012-7-12 12:38
Weekday(TargetR(i, n)) = 7, 实际上是周六,因为你没有指定一周开始的第一天是周几
默认是从周日开始的,所 ...


导出的结果不对啊

本帖子中包含更多资源

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

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-23 00:50 , Processed in 0.110969 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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