作者:王者灬旋律 | 来源:互联网 | 2023-05-26 09:09
我有一个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.EnableEvents
为false或冒险触发另一个事件并使宏运行在其自身之上.
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