当前位置:  开发笔记 > 后端 > 正文

在单元格更改上自动执行Excel宏

如何解决《在单元格更改上自动执行Excel宏》经验,为你挑选了2个好方法。

每当特定单元格中的值发生更改时,如何自动执行Excel宏?

现在,我的工作代码是:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("H5")) Is Nothing Then Macro
End Sub

"H5"被监视的特定单元格在哪里,是Macro宏的名称.

有没有更好的办法?



1> Mike Rosenbl..:

你的代码看起来很不错.

但是,要小心,你的调用Range("H5")是一个快捷命令Application.Range("H5"),相当于Application.ActiveSheet.Range("H5").如果唯一的更改是用户更改(这是最典型的),这可能没问题,但是当工作表的单元格值不是通过程序更改(例如VBA)的活动工作表时,它可能会更改.

考虑到这一点,我会利用Target.Worksheet.Range("H5"):

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Target.Worksheet.Range("H5")) Is Nothing Then Macro
End Sub

或者Me.Range("H5"),如果事件处理程序位于相关工作表的代码页(通常是),则可以使用:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Me.Range("H5")) Is Nothing Then Macro
End Sub

希望这可以帮助...


如果单元格'H5`从另一张表改变,比如说'sheet2`那么上面的函数不起作用.请帮忙.
对于通过谷歌搜索来到这里的任何人,请确保将此代码粘贴到vba中的表单中,而不是像我那样的模块.看看http://stackoverflow.com/questions/15337008/excel-vba-run-macro-automatically-whenever-a-cell-is-changed

2> Joe..:

处理Worksheet_Change活动或Workbook_SheetChange活动.

事件处理程序采用"目标作为范围"参数,因此您可以检查正在更改的范围是否包括您感兴趣的单元格.


如果您的单元格只是更改范围的*部分*,则第一条注释(`Target.Address = Range("H5").Address`)将不起作用.第二条评论仍然存在Mike Rosenblum描述的问题.
推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有