背景
我有一张名为 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活动的内容?
任何有关决议的帮助都将不胜感激。
答案 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
最后,我必须确保分组从最小的增量到最大的增量,以确保我没有丢失大规模分组(小计)切换的功能。我经常会丢失最后一个里程碑的小计切换。