按范围内的单元格顺序解决错误

时间:2018-01-23 15:12:56

标签: excel vba for-loop range

我有一个功能,它通过一个日历,并根据他们的列号设置星期日和星期六。然后我将范围设定为一周(周日至周六)。

我的问题是,当循环到达星期六时,set week范围内的两个单元格似乎已交换位置,因此选择星期六到星期日。

我该如何解决这个问题?

For colNum = 4 To 100
    Set currentCell = .Cells(rowNum, colNum)
    Set otCell = currentCell.Offset(-1, 0)
    Set regCell = currentCell.Offset(-2, 0)

    If colNum Mod 7 = 4 Then
        sun = colNum
    End If

    If colNum Mod 7 = 3 Then
        sat = colNum
    End If

    Set week = .Range(.Cells(rowNum, sun), .Cells(rowNum, sat))
    week.Select
Next colNum

1 个答案:

答案 0 :(得分:0)

说实话,真的很难理解你的意思。但是,我们希望您正在构建某种花哨的日历,从5列开始,您需要将周分开。例如。像这样的东西(颜色更容易):

enter image description here

您的代码应该只执行某种操作(在您的案例选择中,在我的情况下着色范围),当它定义了一周中的最新日期(在我们的情况下是星期六)。在所有其他情况下,它应该继续循环。因此,试试这个:

Public Sub TestMe()

    Dim colNum  As Long
    Dim week    As Range
    Dim sun     As Long
    Dim sat     As Long

    Dim bColor  As Boolean

    For colNum = 4 To 100
        If colNum Mod 7 = 4 Then
            sun = colNum
        ElseIf colNum Mod 7 = 3 Then
            sat = colNum
            Set week = Range(Cells(1, sun), Cells(200, sat))
            bColor = Not bColor
            If bColor Then
                week.Interior.Color = vbRed
            Else
                week.Interior.Color = vbGreen
            End If
        End If
    Next colNum
End Sub

编辑:

为了使您的代码正常工作,请尝试以下方法:

If sat-sun <> 1 Then
    Set week = .Range(.Cells(rowNum, sun), .Cells(rowNum, sat))
    week.Select
End If