VBA如何实现监控单元格的更新时间、点击按钮生成打印报表

djdeaw 发表于: 2009-7-08 12:23 来源: 扑奔PPT网

Private Sub Worksheet_Change(ByVal Target As Range)
Dim CurRow As Long
Dim CurColumn As Long
Dim FinalRow As Long
Dim TempRow As Long
CurRow = Target.Row                                                     '得到当前行
CurColumn = Target.Column                                               '得到当前列
FinalRow = Worksheets("sheet1").Cells.SpecialCells(xlCellTypeLastCell).Row  '得到最后一行
Application.EnableEvents = False                                        '禁止发生重复中断
Application.ScreenUpdating = False                                      '禁止屏幕更新
If CurRow > 6 And (CurColumn > 6 And CurColumn < 11) Then        '如果G:J列满足对应的列要求
    Worksheets("sheet1").Cells(CurRow, 13) = Now                         '则在对应的M列填写当前的系统日期和时间
Else
    Application.ScreenUpdating = True               '允许屏幕更新
    Application.EnableEvents = True                 '允许再次发生中断
    Exit Sub
End If
For TempRow = 7 To FinalRow Step 1                                      '从第 7行开始到最后一行进行检查
    If Worksheets("sheet1").Cells(TempRow, 13) <> Empty Then             '如果当前行的M列不为空
        If Int(Worksheets("sheet1").Cells(TempRow, 13)) <> Date Then     '且当前行的M列日期不等于当前的系统日期
            Worksheets("sheet1").Cells(TempRow, 13).Interior.ColorIndex = xlColorIndexNone   '去掉背景色
        Else                                                            '否则, 即等于当前系统日期
            Worksheets("sheet1").Cells(TempRow, 13).Interior.ColorIndex = 3   '将对应的E列背景色改为红色
        End If
    End If
Next TempRow
Application.ScreenUpdating = True               '允许屏幕更新
Application.EnableEvents = True                 '允许再次发生中断
End Sub

'我希望实现的是:
'1、当我更新G:J列并>6行 (如果控制在<1000行会不会加快速度) 时,M列能自动记录我的更新的时间,并用红色突出显示最近一天的所有更新记录...
'   这个问题您上面的程序已经帮我解决了,但我发现在个小问题,就是每次M列更新后,撤消的记录都被清空了, _
    撤消这个功能对我来说非常重要,万一有时候不小心弄错了哪里,又不知道原来单元格是什么参数,不能撤消一步,那不就会死的很惨....
'
'2、和第1个问题差不多,就是更新右边配置的时候,更新时间记录在另一列N上
'   当我更新S:FP列(19-172列)中奇数列,并>6行时,N列才能自动记录我的更新的时间,并用粉红色突出显示最近一天的所有更新记录...
'   偶数列20 22 24 ...递增不写了...172(就是我隐藏了的列),这些列有公式是变量,每天都要计算需求数量,所以我不希望N列记录它们的更新时间....
'
'3、下面的程序能否实现第2个要求? 如果可以,怎么合并上下两个程序?如果没什么用那就不用管它了...
'
'4、我想分别在M5和N5两个位置设两个按钮,这两个按钮功能是一样,只是一个是控制M列的,另一个是控制N列,要实现下面的功能这两个按钮会不会有冲突...
'   需要实现:只显示最近更新的(?)天的行,其它行隐藏,这里的问号(?)代表的是可选,
'   例如:像用微调按钮调整到5天,就只显示最近5天内更新过的行,其它行隐藏...
'         或者是象选择日期时间表(附图)一样选择到某一天,那就只显示某一天到今天有过更新的行,其它行隐藏...
'
'5、K3这位置有个按钮“点击生成打印报表”,我觉得这个按钮挺好的,可是我们领导说这个按钮还没有达到他希望的要求.........
'   这个按钮一般都是最后按的,都在产生需求数量后点一下,他希望点击这个按钮后实现: _
    5.1、按O列筛选并>6行以下的,只显示需求数量>0的行,其它行隐藏 _
    5.2、再复制整个工作表 _
    5.3、新建另一个新的工作薄 _
    5.4、粘贴,再复制选择性粘贴以数值粘贴,就是为了保留格式,去掉公式 _
    5.5、删除所有隐藏了的行,就是O列没有需求数量的行,包括第1和2行,但要保留3、4、5、6行, _
         因为这是打印顶端标题行,然后删除6行(如果1、2已删,那这就是第4行)以下所有隐藏了的行 _
         (第5.1条和第5.4条是不是可以放在一起执行) _
    5.6、删除B:F列(隐藏中)和F,H:I,再删除S:IV列 _
    5.7、P4单元格筛选,以降序排列 _
    5.8、完成(例如"sheet2"的样子)

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.ScreenUpdating = False '关闭屏幕刷新
    Dim intRow&, intCol&, i&, MaxTime As Date
    intRow = Target.Row '记录行号
    intCol = Target.Column '记录列号
    '当更新的范围在3行以后,S:FP列之内时执行
    If intRow > 6 And (inCol >= 20 And inCol <= 172 And inCol Mod 2 = 0) Then
        Cells(intRow, 14) = Now() '将现在时刻记录在N列
        '由于记录的都是历史日期和时间,所以求离今天日期即求N列最大值
        '求N列最大值
        MaxTime = WorksheetFunction.Max(Range("N7:N" & Range("N65536").End(xlUp).Row))
        Range("N7:N" & Range("N65536").End(xlUp).Row).Interior.ColorIndex = xlNone '消除所有颜色
        With Sheet6 '将范围限定在Sheet6,加快速度
            For i = 7 To Range("N65536").End(xlUp).Row '从第七行一直到数据记录最后一行开始循环
                '当日期=Maxtime是就变色
                If Year(MaxTime) = Year(.Cells(i, 14)) And Month(MaxTime) = Month(.Cells(i, 14)) And _
                Day(MaxTime) = Day(.Cells(i, 14)) Then .Cells(i, 14).Interior.ColorIndex = 7
            Next i
        End With
    End If
    Application.ScreenUpdating = True '开启屏幕刷新
End Sub

VBA如何实现监控单元格的更新时间、点击按钮生成打印报表 (344 KB, 下载次数: 12)

大家对 VBA如何实现监控单元格的更新时间、点击按钮生成打印报表 的评论
最新PPT模板
最新贴子
PPT热贴