Excel vba worksheet_change事件

PrivateSubWorksheet_Change(ByValTargetAsRange)IfSheets("检查标记").Cells(2,1).Value=1Then... Private Sub Worksheet_Change(ByVal Target As Range)

If Sheets("检查标记").Cells(2, 1).Value = 1 Then
Sheets("检查标记").Unprotect Password:="123"
Sheets("检查标记").Cells(1, 1).Value = "标记"
Sheets("检查标记").Cells(2, 1).Value = 0
Sheets("检查标记").Protect Password:="123"

Else
Exit Sub
End If
End Sub
当替换10万行的数据的时候,事件会触发10万次,效率低下,甚至造成死机,如何解决这个问题?
还有个奇怪的现象:之前这个事件10万行数据执行事件大概为3秒,现在不知道怎么回事,执行时间超长并且会造成Excel没有响应了...可以确认的是之前该事件也已经触发了...并且数据一样是10万行,替换动作一样
展开
 我来答
enmzxf
推荐于2016-09-13 · TA获得超过255个赞
知道小有建树答主
回答量:249
采纳率:0%
帮助的人:171万
展开全部
增加一行判断函数试试:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not (Target.Cells.Row = 2 And Target.Cells.Column = 1) Then Exit Sub

If Sheets("检查标记").Cells(2, 1).Value = 1 Then
Sheets("检查标记").Unprotect Password:="123"
Sheets("检查标记").Cells(1, 1).Value = "标记"
Sheets("检查标记").Cells(2, 1).Value = 0
Sheets("检查标记").Protect Password:="123"

Else
Exit Sub
End If
End Sub
追问
首先:改变的不是检查标记这个工作表,Change事件是别的工作表的;其次Target.cells.row>1时Exit sub不能终止Change事件(已经测试过)
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Excel开发
2012-05-04 · TA获得超过2915个赞
知道大有可为答主
回答量:1989
采纳率:53%
帮助的人:1021万
展开全部
先不启用宏,替换完了再启用宏
更多追问追答
追问
......这个解决方案还不如直接让客户去手动操作呢......
追答
现在是你要操作数据,不是客户吧?上述代码的意思是:当A2的值为1时取消工作表保护。当A2值为0时,启用工作表保护。与你要替换的其他数据没有任何关系,为何要反复地去执行这个操作?你要替换数据,A2必定是1,否则无法替换。每替换一个数,工作表要执行取消保护一次,何苦呢,关掉宏,处理好你的工作表再开启宏,不是什么麻烦也没有了。

刚写错了,补充下:是当A2为1是,先取消保护,再标注,再启用保护,每变更一个数都要如此一个循环。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
VBA战国
2012-05-05
知道答主
回答量:21
采纳率:0%
帮助的人:18.7万
展开全部
其实解决起来很简单,加一句代码就可以了,Application……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
eagleboycn
2012-06-20 · 超过45用户采纳过TA的回答
知道答主
回答量:146
采纳率:0%
帮助的人:144万
展开全部
If (Sheets("检查标记").Cells(2, 1).Value = 1) Then
...
else
...
end if
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式