设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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

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

本帖子中包含更多资源

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

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享分享 分享淘帖 订阅订阅
22#
 楼主| 发表于 2012-7-12 07:59:13 | 只看该作者
roych 发表于 2012-7-11 21:21
个人建议不必在Access中处理,而是考虑在Excel中处理。
1、用Weekday函数可以有效地查找到周末。
2、个别 ...

我的数据都保存在ACCESS中,只能通过在导出数据时,一次性的处理。
21#
 楼主| 发表于 2012-7-12 07:56:55 | 只看该作者
todaynew 发表于 2012-7-11 17:08
不要Excel表不就完事了,直接在Access中完成报表即可。

因为需要导出到特定的格式中,所以做了一个EXCEL模板。
如果在ACCESS中生成报表的话,能得到如我附件中的EXCEL模板一样的格式吗?
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循环,速度慢了,请帮我用数组写个示例吧
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 ...

现在对了,谢啦
18#
发表于 2012-7-12 15:57:00 | 只看该作者
本帖最后由 todaynew 于 2012-7-12 16:00 编辑
kent_73 发表于 2012-7-12 15:42
像这样的格式怎么样在ACCESS中做查询啊
我不会做,辛苦版主帮做一个吧
谢谢了


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

实际上就是一个简单的交叉查询做报表的数据源而已。
17#
发表于 2012-7-12 12:38:32 | 只看该作者
本帖最后由 Benjamin_luk 于 2012-7-12 12:39 编辑

Weekday(TargetR(i, n)) = 7, 实际上是周六,因为你没有指定一周开始的第一天是周几
默认是从周日开始的,所以
Weekday(TargetR(i, n)) = 1 才是周日
你自己改一下.
16#
 楼主| 发表于 2012-7-12 12:08:46 | 只看该作者
谢谢了,我试试
15#
发表于 2012-7-12 12:02:19 | 只看该作者
设xlApp.Visible =False 大概可以省一半的时间
{:soso_e100:}
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)

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

本版积分规则

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

GMT+8, 2024-9-20 23:49 , Processed in 0.095146 second(s), 35 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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