【发布时间】:2016-11-16 15:51:35
【问题描述】:
所以我有一个带有主工作表和从属工作表的工作簿,除此之外(因此选择 = 7 件事)它计算工作表数据部分的每一行和每一列的总数以及所有数据。我有这部分工作,但是当我继续下一步/选项时,将主表的总和与从属表的总和进行比较(加上在发生变化时重新计算每张表的总和或未填写等)我遇到了错误。
它在每张纸上都很好地执行了总计功能,然后在循环结束时似乎遇到了问题。并非本工作簿中的每张表都是数据表,因此不遵循其他表的特定布局。由于这些没有任何特定的顺序,我在我的代码中只是跳过它们。它通过故意捕获因使用不符合其他布局的东西而产生的错误,然后跳到循环的底部来做到这一点。
目前我只有这些额外的一张,我尝试将其取出,但在循环结束时仍然出现错误。奇怪的是,即使我有错误处理,它似乎也没有被它捕获。 k 这里是从属总数的总和,Position 只是一个最大值(我想利用我的所有变量,即使它们在其他功能中并不重要),任何奇数,如 MastLastRow - 6 是为了说明标签和工作表的其他部分不是数据部分,标志部分是确保有人没有意外删除数据。虽然我有多行 GoTo ErrCatch7: 这些只是帮助我跳到底部,并且代码中任何地方应该出现的唯一错误是在点击额外的工作表时。如果您需要进一步说明代码中的内容在做什么,或者需要我发布显示电子表格的图片,请告诉我
ElseIf Fchoice = "7" Then
k = 0
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
On Error GoTo ErrCatch7:
MastLastRow = Sheets("Master").Range("A7").CurrentRegion.Rows.Count
For Each WSCount In Worksheets
If WSCount.Name = "Master" Then
MastLastCol = Sheets("Master").Range("A5").CurrentRegion.Columns.Count
If Sheets("Master").Range("C7").Offset(MastLastRow - 7, 0) = "" Then
Sheets("Master").Range("C7").Offset(MastLastRow - 7, 0).EntireRow.ClearContents
End If
MastLastRow = Sheets("Master").Range("A7").CurrentRegion.Rows.Count
j = -1
i = 0
Set TempM = Range("H7")
Do While i < MastLastRow - 6
Set TempP = Range(TempM.Offset(0, 1), TempM.Offset(0, MastLastCol))
TempM.Value = Application.Sum(TempP)
Set TempM = TempM.Offset(1, 0)
i = i + 1
Loop
Do While j < MastLastCol - 8
Set TempP = Sheets("Master").Range(TempM.Offset(-1, 0), Sheets("Master").Range("I7").Offset(0, j))
TempM.Value = Application.Sum(TempP)
Set TempM = TempM.Offset(0, 1)
j = j + 1
Loop
Sheets("Master").Range("H7").Offset(MastLastRow - 6, 0).Font.ColorIndex = 6
Sheets("Master").Range("H7").Offset(MastLastRow - 6, 0).Interior.Color = RGB(0, 0, 255)
Sheets("Master").Range("H7").Offset(MastLastRow - 6, -1).Value = "Sheet Total"
GoTo ErrCatch7:
Else
Set MastData = Sheets("Master").Range("A7")
Set SubordData = WSCount.Range("A7")
SubordLastRow = WSCount.Range("A7").CurrentRegion.Rows.Count
SubordLastCol = WSCount.Range("A5").CurrentRegion.Columns.Count
If WSCount.Range("C7").Offset(SubordLastRow - 7, 0) = "" Then
WSCount.Range("C7").Offset(SubordLastRow - 7, 0).EntireRow.ClearContents
End If
SubordLastRow = WSCount.Range("A7").CurrentRegion.Rows.Count
Flag = True
If MastLastRow > SubordLastRow Then
Position = MastLastRow
Else
Position = SubordLastRow
End If
'Check if tasks in subordinate sheet have been mistakenly erased or misformated
Do While i < Position And j < Position
If MastData.Offset(i, 0).Value = SubordData.Offset(j, 0).Value Then
i = i + 1
j = j + 1
ElseIf MastData.Offset(i, 0).Value = SubordData.Offset(j, 0).Value And MastData.Offset(i, 0).Value = vbNullString Then
i = i + 1
j = j + 1
ElseIf MastData.Offset(i, 0).Value = vbNullString And SubordData.Offset(j, 0).Value <> vbNullString Then
i = i + 1
ElseIf SubordData.Offset(j, 0).Value = vbNullString And MastData.Offset(i, 0).Value <> vbNullString Then
j = j + 1
Else
Flag = False
Exit Do
End If
Loop
If Flag = False Then
MsgBox (OrgName + " appears to be missing tasks. This sheet will be ignored. Check for mistakes and compare totals later")
GoTo ErrCatch7:
End If
j = -1
i = 0
Set TempM = WSCount.Range("H7")
Do While i < SubordLastRow - 6
Set TempP = WSCount.Range(TempM.Offset(0, 1), TempM.Offset(0, SubordLastCol))
TempM.Value = Application.Sum(TempP)
Set TempM = TempM.Offset(1, 0)
i = i + 1
Loop
Do While j < SubordLastCol - 8
Set TempP = WSCount.Range(TempM.Offset(-1, 0), WSCount.Range("I7").Offset(0, j))
TempM.Value = Application.Sum(TempP)
Set TempM = TempM.Offset(0, 1)
j = j + 1
Loop
WSCount.Range("H7").Offset(SubordLastRow - 6, 0).Font.ColorIndex = 6
WSCount.Range("H7").Offset(SubordLastRow - 6, 0).Interior.Color = RGB(0, 0, 255)
WSCount.Range("H7").Offset(SubordLastRow - 6, -1).Value = "Sheet Total"
End If
k = k + WSCount.Range("H7").Offset(SubordLastRow - 6, 0).Value
ErrCatch7:
Next
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.DisplayStatusBar = True
MsgBox ("Master sheet hourly total = " + Sheets("Master").Range("H7").Offset(SubordLastRow - 6, 0).Value + ": Sum of subordinate sheets = " + k)
【问题讨论】:
-
这是一篇不错的文章,也很长。 :) 但是实际的错误信息是什么,哪一行?
-
“运行时错误 '92' For Loop 未初始化”在下一行
标签: vba excel macros excel-2010