excel的VBA代码卡好像循环卡死了,求解决办法
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then
If Target.Column = 2 Then '1表示第1列的内容改变时
Cells(Target.Row, 1) = Now '2表示在第2行记录修改时间
End If
End If
If Target.Count = 1 Then
If Target.Column = 12 Then '1表示第12列的内容改变时
Cells(Target.Row, 6) = Now '2表示在第6行记录修改时间
End If
End If
If Not IsEmpty(Column = 9) Then
Cells(Target.Row, 12) = "已用"
End If
End Sub
1栏用来记录2.3.4.5栏的登记时间(以2栏为准)
而当2.3.4.5栏的记录粘贴到另一侧7.8.9.10栏表示已经使用过的时候
6栏会响应并记录操作时间。(以7栏为准)
但是Worksheet_Change好像并不响应多单元格的粘贴。
所以就想了个折中的办法,增加一个逻辑判断机制,
if 9栏不为空,则12栏自动增加数据“已用”
if 12栏有数据修改,则6栏响应并记录操作时间。 展开
问题出在最后一个IF
“
If Not IsEmpty(Column = 9) Then
Cells(Target.Row, 12) = "已用"
End If
”
我不太理解你的函数的目的是什么,
前面都理解:是出现变化的单元格数量=1(Target.Count = 1),以及对应的列号=(Target.Column = 12)时进行对应的填充操作
但是最后一个IF在任何Worksheet_Change都会执行
《If Not IsEmpty(Column = 9) Then》 这句话中的Column没有任何赋值,
那么Column = 9为假
Not IsEmpty(Column = 9)就为真
所以Cells(Target.Row, 12) = "已用" 必然执行
然后这个IF中的“Cells(Target.Row, 12) = "已用"”本身是个Worksheet_Change事件,会导致循环执行Worksheet_Change
所以解决的方法要么给最后一个IF添加先提条件
或者
在函数开始添加Application.EnableEvents = False
结尾添加Application.EnableEvents = True
再或者
请把你需要达到的目的说一下
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False‘添加的--------
If Target.Count = 1 Then
If Target.Column = 2 Then '1表示第1列的内容改变时
Cells(Target.Row, 1) = Now '2表示在第2行记录修改时间
End If
End If
If Target.Count = 1 Then
If Target.Column = 12 Then '1表示第12列的内容改变时
Cells(Target.Row, 6) = Now '2表示在第6行记录修改时间
End If
End If
If Not IsEmpty(Column = 9) Then
Cells(Target.Row, 12) = "已用"
End If
Application.EnableEvents = True‘添加的--------
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False '添加的--------
'------------第一部分没有问题------------
If Target.Count = 1 Then
If Target.Column = 2 Then '1表示第1列的内容改变时
Cells(Target.Row, 1) = Now '2表示在第2行记录修改时间
End If
End If
'------------这部分你是多多单元格粘贴,所以要大于等于1------------
If Target.Count >= 1 Then
If Target.Column = 7 Then '7表示第7列的内容改变时
x = Target.Rows.Count'判断粘贴多少行
If x >= 1 Then'循环填充时间
For n = 0 To x - 1
Cells(Target.Row + n, 6) = Now
Next
End If
End If
End If
Application.EnableEvents = True '添加的--------
End Sub
这里面还有不少缺点,由于部分需求不太明白,自己先尝试,有问题在交流
例如:
你向78910粘贴的时候,多行粘贴是否连续,中间有没有间隔行等
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count <> 1 Then exit sub
If Target.Column = 2 Then '1表示第1列的内容改变时??这里是第2列啊?
Cells(Target.Row, 1) = Now '2表示在第2行记录修改时间 你这里写的是第一行……
else If Target.Column = 12 Then '1表示第12列的内容改变时
Cells(Target.Row, 6) = Now '2表示在第6行记录修改时间
End If
If Not IsEmpty(Column = 9) Then '??这里没看懂要表达什么?
Cells(Target.Row, 12) = "已用"
End If
End Sub
有什么问题请继续追问,有些地方我没看懂啊
已经补充了图片和意图的说明。非常感谢!!
我手机上的,没看到图片啊?