首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将此eventproc代码与checkdata代码合并?

如何将此eventproc代码与checkdata代码合并?
EN

Stack Overflow用户
提问于 2013-04-08 10:43:02
回答 1查看 83关注 0票数 0

我最近被帮助创建了一些checkdata代码,如下所示:

代码语言:javascript
复制
Private Sub Worksheet_Activate()
    CheckData Me.Range("C3:V65")
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
    CheckData Intersect(Target, Me.Range("C3:V65"))
End Sub
Sub CheckData(rng As Range)
    Dim icolor As Integer
    Dim cell As Range

    If rng Is Nothing Then Exit Sub

    For Each cell In rng.Cells
        icolor = 0
        Select Case cell
            Case "": icolor = 2
            Case Is <= Date + 30: icolor = 3
            Case Is <= Date + 60: icolor = 6
            Case Is > Date + 60: icolor = 2
        End Select
        If icolor <> 0 Then cell.Interior.ColorIndex = icolor
    Next cell
End Sub

我在一个工作簿上使用了它,该工作簿实际上只有一个宏需要在指定的范围内运行。但是,我在另一个工作簿中设置了下面的代码,我需要修改该工作簿才能使checkdata函数工作。

代码语言:javascript
复制
Private Sub Worksheet_Change(ByVal Target As Range)
        Application.ScreenUpdating = False
        Application.EnableEvents = False

        EventProc1 Target
        EventProc2 Target

        Application.EnableEvents = True
        Application.ScreenUpdating = True
    End Sub

    Private Sub EventProc1(ByVal Target As Range)
        Dim icolor As Integer
        Dim cell As Range

        If Intersect(Target, Range("L2:L55")) Is Nothing Then Exit Sub
        For Each cell In Target
            icolor = 0
            Select Case cell
                Case "": icolor = 2

                Case Is <= Date + 120: icolor = 3 
                Case Is <= Date + 180: icolor = 6 
                Case Is > Date + 180: icolor = 2

            End Select
            If icolor <> 0 Then cell.Interior.ColorIndex = icolor
        Next cell
    End Sub

    Private Sub EventProc2(ByVal Target As Range)
        Dim icolor As Integer
        Dim cell As Range

        If Intersect(Target, Range("O2:O55")) Is Nothing Then Exit Sub
        For Each cell In Target
            icolor = 0
            Select Case cell
                Case "": icolor = 2

                Case Is <= Date + 30: icolor = 3 
                Case Is <= Date + 60: icolor = 45
                Case Is <= Date + 90: icolor = 6 
                Case Is > Date + 90: icolor = 2 

            End Select
            If icolor <> 0 Then cell.Interior.ColorIndex = icolor
        Next cell
    End Sub

我想我可以像这样合并这两个Worksheet_Change事件:

代码语言:javascript
复制
Private Sub Worksheet_Change(ByVal Target As Range)
        CheckData Intersect(Target, Me.Range("C3:V65"))

        Application.ScreenUpdating = False
        Application.EnableEvents = False

        EventProc1 Target
        EventProc2 Target

        Application.EnableEvents = True
        Application.ScreenUpdating = True
    End Sub

但在这里,我不知道如何将Sub EventProc1/2转换为新的CheckData格式。有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2013-04-08 19:18:49

正如你所说,你的代码没有问题,但我做了几个mod,使它们与checkdata的格式相同,我更喜欢这些,因为你强制颜色的范围并不是硬编码的:

代码语言:javascript
复制
Private Sub Worksheet_Change(ByVal Target As Range)            
    Application.ScreenUpdating = False
    Application.EnableEvents = False

    CheckData Intersect(Target, Me.Range("C3:V65"))

    EventProc1 Intersect(Target, Me.Range("L2:L55"))
    EventProc2 Intersect(Target, Me.Range("O2:O55"))

    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub

EventProc1:

代码语言:javascript
复制
Sub EventProc1 (rng As Range)
    Dim icolor As Integer
    Dim cell As Range

    If rng Is Nothing Then Exit Sub

    For Each cell In rng.Cells
        icolor = 0
            Select Case cell
                Case "": icolor = 2                    
                Case Is <= Date + 120: icolor = 3 
                Case Is <= Date + 180: icolor = 6 
                Case Is > Date + 180: icolor = 2           
            End Select
        If icolor <> 0 Then cell.Interior.ColorIndex = icolor
    Next cell
End Sub

EventProc2:

代码语言:javascript
复制
Sub EventProc2 (rng As Range)
    Dim icolor As Integer
    Dim cell As Range

    If rng Is Nothing Then Exit Sub

    For Each cell In rng.Cells
        icolor = 0
            Select Case cell
                Case "": icolor = 2                    
                Case Is <= Date + 30: icolor = 3 
                Case Is <= Date + 60: icolor = 45
                Case Is <= Date + 90: icolor = 6 
                Case Is > Date + 90: icolor = 2            
            End Select
        If icolor <> 0 Then cell.Interior.ColorIndex = icolor
    Next cell
End Sub
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15870456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档