gpt4 book ai didi

vba - Excel VBA 正在跳过特定的代码行

转载 作者:行者123 更新时间:2023-12-01 04:44:21 25 4
gpt4 key购买 nike

大家。我在 Excel 工作簿中有一个大型 VBA 模块,它从一堆其他远程工作簿中获取数据并将其复制到当前工作簿中。然后,它格式化和分析数据。所有这些都工作正常,只是可能需要一段时间,因为我在两个工作表中处理超过 30,000 行数据(并且每天都在增加)。

所以,我试图让它以百分比的形式将进度放在“管理”工作表的某个单元格中。这似乎也可以正常工作,但只是有时。在执行过程中,Excel(看似随机)会跳过更新进度的 .Value 代码行。有时,它会更新大约四分之三的时间,而其他时候,它直到执行结束才更新。有谁知道为什么?以下是相关代码的摘要。

<some code that declares variables and whatnot>
ThisWorkbook.Worksheets("Admin").Range("H18").Value = "Waiting..."
For Each rw In rng.Rows
<code that does the data-gathering and analysis>
progress = <code that returns a Double value>
ThisWorkbook.Worksheets("Admin").Range("H18").Value = progress & "% complete."
Next rw
ThisWorkbook.Worksheets("Admin").Range("H18").Value = "Done!"
<some cleanup code>

有时,“Waiting...”从不显示。其他时候,它是。 “完毕!”几乎总是在执行结束时显示,但 Admin!H18 不会为很多很多循环更新,并且当它被跳过时它永远不会是同一组循环。计算仍在进行中(我认为),因为当它确实更新时,它正在更新为正确的值。但它不会在每个循环中更新单元格,只是更新其中的一部分。

最佳答案

在更新单元格后添加 DoEvents 可能会解决此问题。但是,如果您禁用 ScreenUpdating(这会阻止您的状态更新在工作表上更新),您的代码可能会运行得更快。尝试更新状态栏。

另外 - 将您的状态更新拆分到一个单独的 Sub 中将简化您的代码并允许您更轻松地更改显示更新的方式。

Sub DoStatus(m)
ThisWorkbook.Worksheets("Admin").Range("H18").Value = m
DoEvents
End Sub

关于vba - Excel VBA 正在跳过特定的代码行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23523919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com