使用If / then语句调整For / Next循环中的值

时间:2015-03-17 13:05:14

标签: excel-vba excel-2010 vba excel

所以我有一个很好的复杂系列的潜艇都与用户形式相关联。代码基本上检查存储在今天的表格中的日期值,将T / F应答存储在另一个表中,并且一旦每行符合Trues标准,则将日期移动到另一个表格以进行查看。这是导致问题的第三个表。我希望新表在这里连续列出所有内容,但相反,我可以做的就是将它复制到不同工作表上的相同单元格中。

Set ToDoRange = Sheets("ToDo").Range("A2")
 ToDoRow = 2
For i = 2 To LastRow 'Search each column in each row before moving to the next row

For Each ColVar In [PM].Columns

···
···
···

Set WorkReady = Sheets("DateList").Cells(i, j)


If LocChk2.Value = True And TFRange.Value = True And j > ColLoc Then

     With Sheets("DateList").Rows(i)
         .Interior.Color = 8257297
         .Copy
     End With
    Sheets("ToDo").Cells(ToDoRow, j) = WorkReady.Value
       With ToDoRange
        .Borders(xlEdgeBottom).Weight = xlMedium
       End With
 ElseIf LocChk2.Value = False Or TFRange.Value = False Or j <= ColLoc Then
          WorkReady.Interior.Color = 255
          With Sheets("ToDo").Cells(ToDoRow, j)
                .Clear
                .Borders(xlEdgeBottom).Weight = xlMedium
                .Interior.Color = 16755623
          End With
          If j < ColNumber Then
          Sheets("ToDo").Cells(ToDoRow, j).Borders(xlEdgeBottom).Weight = xlNone
          End If


    End If

Next

'If Len(Sheets("ToDo").Cells(ToDoRow, ColLoc).Value) <> 0 Then

ToDoRow = ToDoRow + 1
Set ToDoRange = ToDoRange.Offset(1, 0) 
'End If
Next

当启用底部的If / Then语句时,它似乎随机选择符合该条件的值。如果我在两个“for”而不是“next”s之间移动它,那么它会将所有值更多地偏移到楼梯而不是行。有什么建议吗?

更新:如果我对表格进行排序以便一切都列在一起,那么下次运行子程序时会崩溃Excel。

1 个答案:

答案 0 :(得分:0)

所以它只是崩溃了一次,我仍然不知道它为什么这样做,但只是在代码的末尾自动排序它似乎已经解决了我的所有问题。

Sheets("ToDo").ListObjects("Table1").Sort.SortFields.Add _
        Key:=Range("Table1[[#All],[Number]]"), SortOn:=xlSortOnValues, Order:= _
        xlAscending, DataOption:=xlSortNormal
With Sheets("ToDo").ListObjects("Table1").Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

这是一个简单的解决方案,在我记得你可以对表格进行排序之前,我花了更长的时间才愿意承认。