gpt4 book ai didi

vba - 我的宏在未定义数量的迭代后卡住

转载 作者:行者123 更新时间:2023-12-04 20:14:35 24 4
gpt4 key购买 nike

我有一个宏来检查列 Q 上的某些名称是否出现在列 A 上(按字母顺序排列),如果出现,则将它们打印在列 S 上。但是,每次我运行它时,它都会在未定义数量的迭代后卡住(从不进行相同数量的迭代),所以很难知道发生了什么。如果我用断点运行它并在每次迭代时按 F5,它不会卡住,问题是我有数千个名称要比较,我真的不想按 F5 多次。

这是我的代码:

Sub test()
Range("Q2").Select
analizados = 0
falsos = 0
Do Until IsEmpty(ActiveCell)
id1 = ActiveCell.Value
primera = Left(id1, 1)
Range("A2").Select
Do While Not ActiveCell.Value Like "" & primera & "*"
ActiveCell.Offset(1, 0).Select
Loop
Do While ActiveCell.Value Like "" & primera & "*"
If id1 = ActiveCell.Value Then
Range("S2").Select
ActiveCell.Offset(falsos, 0).Select
ActiveCell.Value = id1
falsos = falsos + 1
Exit Do
End If
ActiveCell.Offset(1, 0).Select
Loop
analizados = analizados + 1
Range("Q2").Select
ActiveCell.Offset(analizados, 0).Select
Loop
End Sub

谢谢

最佳答案

正如您所注意到的,它实际上并没有被卡住。只是 Excel 无法跟上更新屏幕的速度,就像您用“事件工作表上的某些内容已更改”事件轰炸它一样快,并且在某一时刻它放弃并让宏完成而无需刷新 -至少我是这么理解的(虽然可能不完全是这样)。

尝试这个:

Sub Test()
On Error GoTo ErrHandler
Application.ScreenUpdating = False

'...
'(rest of your code)
'...

CleanExit:
Application.ScreenUpdating = True
Exit Sub

ErrHandler:
MsgBox Err.Description
Resume CleanExit
End Sub

基本上你告诉 Excel 在你完成之前不要再重新绘制自己:这应该会大大加快你的循环。

您可能希望将其与 Application.Calculation 的不同设置结合使用。和 Application.Cursor , 也;为了获得更好的用户体验,您可以使用状态栏告诉用户稍等:
Sub Test()
On Error GoTo ErrHandler
Application.StatusBar = "Please wait..."
Application.ScreenUpdating = False
'...

'...
CleanExit:
Application.StatusBar = False
Application.ScreenUpdating = True
Exit Sub

关于vba - 我的宏在未定义数量的迭代后卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30444986/

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