vba 这个change事件怎么修改?

来源:百度知道 编辑:UC知道 时间:2024/05/14 02:48:52
在某一处, 输入某个值, 按回车键, 触发下面的change事件.
1. 要回到原先选中的项.
2. 把原先选中的项里输入"test"值.

Private Sub Worksheet_Change(ByVal Target As Range)
ActiveCell.Offset(-1, 0).Range("A1").Select
Selection = "test"
End Sub

运行结果, 陷入无限循环, 直到顶部出错.
好象写入"test"的时候, 又一次触发change事件.

哪位大侠帮我解决一下吧.
我把问题弄的太简单了。 原先的需求是:

在某一处(此处已添加批注), 输入某个值, 按回车键或点击别处, 触发change事件.
1. 光标要回到刚才输入值的单元格.
2. 把单元格里的内容跟该单元格里的批注里的值互换.

第1个需求,输入完后按回车键, 我做的没有问题, 但是点击其他单元格来出发事件, 就出问题了。 谁能解决就好了。
第2个需求有点复杂且已经实现。 所以改成简单一点, 只输入"test"值.

你们给出的办法是把第2个步骤用判断省略掉了。而我要第2个写入值的步骤必须执行,且不陷入死循环。

我的代码是用录制宏自动生成, 再改过来的。 有错误的或更简单的请多多指教。 谢谢

Private Sub Worksheet_Change(ByVal Target As Range)
If Target <> "test" Then
Target = "test"
Target.Select
End If
End Sub

不懂,这不是不论你输入什么值,都转化成test,而且按回车不移动到其它单元格吗?...

target.select
target="test"

不就行了?

楼主,这样就可以了(经过试验):
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("A1").Value <> "test" Then
Range("A1").Value = "test"
End If
End Sub

其实,就在你原先的基础上加个判断就行。
第一次change事件,A1单元格的值被修改为test;
第二次change事件,判定已经等于test了,就没有修改单元格内容。
这样后面就不会再有change事件发生。

ActiveCell.Offset(-1, 0).Range("A1").Select
光标往上移一格,ActiveCell.Offset(-1, 0).Select 就可以了,还要Range("A1")干什么?

糊涂先生的方法可以满足。楼主采用吧。
跟不上楼主的需求变化。楼主应该加分寻能人了。

楼主思路有问题,你想实现什么功能,直接说就可以了