excel 用于查找最后一行并计算同一列中的多个小计的VBA代码

cyvaqqii  于 2023-06-30  发布在  其他
关注(0)|答案(2)|浏览(168)

我试图写VBA代码来自动化每月报告。下面的问题是一个更大的自动化报告中的许多过程的宏中的一小部分。我需要找到每个子程序的小计(B列中的SUB_PGM)。需要求和的值在H列中。重要的是要注意,程序或程序内的事务的数量并不总是一致的,因此总和范围永远不会一致。我目前的VBA代码通过引用包含程序的小计值的查找表来解决这个问题,而不是尝试对所需数据集中的行求和。作为参考,“Do Until ActiveCell =”'““是因为在最后一行中有一个'。这是由于一些其他的格式化原因,但我使用它作为循环中的停止点。
虽然我的当前宏成功运行并创建了这些分类汇总,但在运行“运行时错误'1004'”后,它会出现以下错误:应用程序定义或对象定义错误。调试器突出显示“If IsEmpty(ActiveCell.Offset(1))Then”。然后,此错误将阻止下一个宏运行,并且运行后的活动单元格将成为Excel文件中最后一行(1048576)。
下面你会发现我的当前代码以及所需结果的屏幕截图。谢谢你的帮助!

Range("H4").Select
Selection.End(xlDown).Offset(1).Select
ActiveCell.FormulaR1C1 = _
    "=IFERROR(VLOOKUP('Current Subpgm'!R[-1]C[-6],Table3,2,FALSE), "" "")"

Do Until ActiveCell = "'"  

Selection.End(xlDown).Select

If IsEmpty(ActiveCell.Offset(1)) Then
ActiveCell.Offset(1).Select
ActiveCell.FormulaR1C1 = _
    "=IFERROR(VLOOKUP('Current Subpgm'!R[-1]C[-6],Table3,2,FALSE), "" "")"
Else
Selection.End(xlDown).Offset(1).Select
ActiveCell.FormulaR1C1 = _
    "=IFERROR(VLOOKUP('Current Subpgm'!R[-1]C[-6],Table3,2,FALSE), "" "")"
End If

Loop

Screenshot of desired outcome

6xfqseft

6xfqseft1#

来自cybernetic.nomad的建议是100%正确的,但是,如果没有看到源数据,就不可能帮助重写代码以避免使用select/active。
从您描述的错误来看,问题听起来像是ActiveCell已经到达了Worksheet的最后一行,然后执行.Offset(1)意味着代码试图访问超出该行的行。
在不试图解决任何潜在问题的情况下(比如为什么代码没有找到带有撇号的单元格),明显的“修复”是在If IsEmpty(ActiveCell.Offset(1)) Then行之前添加以下内容:

If ActiveCell.Row = ActiveCell.Parent.Rows.Count Then
    Exit Do
End If

...如果ActiveCell已到达工作表的最后一行,则这只会导致退出循环...根据您的数据,这可能会解决您的问题...还是不可以!

4smxwvx5

4smxwvx52#

虽然您可以使用代码来完成此操作,但您是否意识到,只需插入一个数据透视表即可轻松地完成此操作,而无需代码?数据透视表还提供了其他一些好处...

相关问题