热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在VBA中结束无限的"更改"循环

如何解决《如何在VBA中结束无限的"更改"循环》经验,为你挑选了2个好方法。

我有一个visual basic的问题.我想创建一个宏/函数,它将我输入的数字乘以3,并在同一个单元格中给出结果.我试过这样的事情:

Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$Q$21" Then
        Target.Value = Target.Value * 3
    End If
End Sub

但它不起作用 - 我得到的结果像"xE25",因为它不断增加.

我希望它在第一次迭代后停止,或者仅当我按下"输入"而不是单元格中的每个更改时才工作.
将结果放在不同的单元格中非常容易,但这不是我的观点.


-----编辑:
我编辑了"If"行到:
If (Target.Column = 5 Or Target.Column = 11 Or Target.Column = 17 Or Target.Column = 23) And (Target.Row >= 19 And Target.Row <= 24) And Target.Value <> "" Then
所以它适用于我需要的所有单元格.之后,最好的解决方案是@ Chrismas007给出的方式,因为它在尝试一次删除少数单元格中的数据时不会提示错误.



1> 小智..:

Worksheet_Change事件宏更改值时,您需要设置Application.EnableEventsfalse或冒险触发另一个事件并使宏运行在其自身之上.

Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$Q$21" Then
        Application.EnableEvents = False
        Target.Value = Target.Value * 3
        Application.EnableEvents = True
    End If
End Sub

虽然我通常会涉及一些错误控制,以便.EnableEvents始终重置为true,但上面应该让你开始.



2> Chrismas007..:

通过错误处理确保.EnableEvents返回True:

Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo CleanExit
    If Target.Address = "$Q$21" Then
        Application.EnableEvents = False
        Target.Value = Target.Value * 3
    End If
CleanExit:
    Application.EnableEvents = True
    On Error GoTo 0
End Sub


推荐阅读
author-avatar
王者灬旋律
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有