在循环期间对单元格进行分组,没有按预期响应

时间:2017-08-16 20:09:56

标签: excel-vba vba excel

背景

我有一张名为 RM 的工作表,我将里程碑数据从一个名为 Finance 的工作表中通过循环拉出(循环是每张纸(" RM&#) 34))。一旦数据被提前,工作表就应该将项目分为两个小计:

1)对里程碑活动进行分组

2)将在循环中拉过来的所有内容分组

以下是代码:

Dim i As Integer
Dim LR As Long, FR As Long
    FR = Sheets("Finance").Cells(Sheets("Finance").Rows.Count, 1).End(xlUp).Row
    Sheets("Finance").Cells(FR + 1, 1).Value = "Raw Materials"
    Sheets("Finance").Cells(FR + 1, 7).Value = Sheets("RM").Cells(12, 2).Value
    For i = 16 To 358 Step 18
        LR = Sheets("Finance").Cells(Sheets("Finance").Rows.Count, 1).End(xlUp).Row
        If Sheets("RM").Cells(i, 4) > 0 And Sheets("RM").Cells(i, 2) = "Fixed" Then
            'Milestone row
            Sheets("Finance").Cells(LR + 1, 1).Value = Sheets("RM").Cells(i, 1).Value
            Sheets("Finance").Cells(LR + 1, 7).Value = Sheets("RM").Cells(i, 4).Value
            Sheets("Finance").Rows(LR + 1).Font.Bold = True
            'Number
            Sheets("Finance").Range(Sheets("Finance").Cells(LR + 2, 1), Sheets("Finance").Cells(LR + 9, 1)).Value = Sheets("RM").Cells(i, 1).Value

            'Removed middle section, which pulls over data from different columns

            'Group Milestone subactivities
            If Sheets("Finance").Cells(LR, 1).Value = Sheets("Finance").Cells(LR - 2, 1).Value Then
                Sheets("Finance").Range(Sheets("Finance").Cells(LR + 2, 1), Sheets("Finance").Cells(LR + 9, 1)).EntireRow.Group
            Else
            End If
        Else
        End If
    Next i
    Sheets("Finance").Rows(FR + 1).Font.Bold = True
    If LR - FR > 1 Then
        Sheets("Finance").Range(Sheets("Finance").Rows(FR + 2), Sheets("Finance").Rows(LR)).EntireRow.Group
    Else
    End If

问题:

里程碑事件的分组没有恰当地进行。当代码运行时,只有一些里程碑得到了他们的分组,尽管发生了总体分组。

在10个里程碑的列表中,1和10没有里程碑分组,但是2-9没有里程碑分组。

我认为if-statement本身存在问题,如果LR-FR> 2那么,但是在单步执行中,我发现了一些奇怪的东西。

当我逐步使用F8时,我意识到我.copy / .pastespecial的数据直到发生一个或两个循环后才会显示。然后,分组显示最后添加的可视粘贴数据。然后,后续数据显示到最后一位。

问题:

有没有办法强制粘贴显示数据?是否还有其他任何可能导致Excel / VBA活动的内容?

任何有关决议的帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

解决这个问题的两件事情是:

1)我必须添加另一行,因此里程碑分组不会与Section分组在同一行上结束(在这种情况下,在问题中发布的子例程中的循环之后)。

Dim LR as Long

LR = Sheets("Finance").Cells(Sheets("Finance").Rows.Count, 7).End(xlUp).Row
Sheets("Finance").Cells(LR + 1, 7).Value = "-"
Sheets("Finance").Rows(LR + 1).Font.Bold = True

2)在循环之后,我把所有的分组都拉到了最后。

分组代码最终看起来像:

Dim a as Integer

LR = Sheets("Finance").Cells(Sheets("Finance").Rows.Count, 7).End(xlUp).Row
For i = 5 To LR
    If Sheets("Finance").Cells(i, 1).Font.Bold = False Then
        Sheets("Finance").Rows(i).EntireRow.Group
    Else
    End If
Next i
'Group between sheets
a = Sheets("Finance").Columns(1).Find(What:="Not Raw Materials", LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False).Row
Sheets("Finance").Range(Sheets("Finance").Rows(4), Sheets("Finance").Rows(a - 1)).EntireRow.Group

最后,我必须确保分组从最小的增量到最大的增量,以确保我没有丢失大规模分组(小计)切换的功能。我经常会丢失最后一个里程碑的小计切换。