Excel工作表事件(2)- Change事件

161 篇文章 16 订阅
20 篇文章 2 订阅

Excel工作表Change事件是最常用的事件代码之一,通俗的讲工作表内容发生变化时,此事件将被激活。
Change事件的过程框架如下,其中参数Target是Range类型变量,代表工作表中发生变化的单元格范围。

Private Sub Worksheet_Change(ByVal Target As Range)
	' Your code
End Sub

下面来看一个最简单示例,将代码写入工作表模块,如下图所示。

Private Sub Worksheet_Change(ByVal Target As Range)
    MsgBox "发生变化的单元格是:" & Target.Address
End Sub

在这里插入图片描述
在Sheet2工作表中选择B3至E8单元格区域,输入“2”,然后按<Ctrl+Enter>快捷键填充数据,将显示如下图所示的提示框,Target.Address将返回发生变化的单元格区域的绝对地址。
在这里插入图片描述


有时需要指定Change事件的有效单元格区域,那么就需要做代码过程中进行相应的判断,使用的场景基本上可以分为如下两种。

  • 场景1:监测单个单元格
    顾名思义,只有某个指定单元格发生变化时,才进行后续的处理。首先判断发生变化的单元格是为单个单元格,接着使用Target.Address = Range(TARGET_RNG).Address作为判断条件,判断是否为指定的单元格,如果需要监测其他单元格,只需要修改常量 TARGET_RNG。
Private Sub Worksheet_Change(ByVal Target As Range)
    Const TARGET_RNG = "A1"
    Application.EnableEvents = False
    With Target
        If .Count = 1 Then
            If .Address = Range(TARGET_RNG).Address Then
 
                ' Your Code
 
            End If
        End If
    End With
    Application.EnableEvents = True
End Sub
  • 场景2:监测指定区域
    如果需要监测某个单元格区域,例如:A5:B10的单元格区域内的某个单元格发生变化时,运行相关代码,可以使用下面的代码。这个应用场景可以兼容“场景1”。
Private Sub Worksheet_Change(ByVal Target As Range)
    Const TARGET_RNG = "A5:B10"
    Application.EnableEvents = False
    With Target
        If .Count = 1 Then
            Set c = Application.Intersect(Range(TARGET_RNG), Target)
            If Not c Is Nothing Then
            
            ' Your Code
            
            End If
        End If
    End With
    Application.EnableEvents = True
End Sub
  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,使用Calculate事件也可以实现在H列输入内容或H列内容更新时,M列置入公式的功能。下面是一个示例代码,可以实现在H列输入内容或H列内容更新时,M列置入公式=len(E4)的功能。 ```csharp using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.Office.Interop.Excel; namespace ExcelDemo { class Program { static void Main(string[] args) { Application app = new Application(); Workbook workbook = app.Workbooks.Open(@"C:\test.xlsx"); //打开Excel文件 Worksheet worksheet = workbook.Worksheets[1]; //获取第一个工作 //在H列输入内容或H列内容更新时,M列置入公式=len(E4) worksheet.Calculate += Worksheet_Calculate; Console.WriteLine("请在Excel中修改H列的内容..."); Console.ReadLine(); workbook.Save(); //保存Excel文件 workbook.Close(); //关闭Excel文件 app.Quit(); //退出Excel应用程序 } private static void Worksheet_Calculate(Worksheet Sh) { Range rangeH = Sh.Range["H:H"]; //获取H列的Range对象 Range rangeM = Sh.Range["M:M"]; //获取M列的Range对象 for (int i = 1; i <= rangeH.Rows.Count; i++) { Range cellH = rangeH.Cells[i]; //获取H列的单元格 Range cellM = rangeM.Cells[i]; //获取M列的单元格 if (cellH.Value != null) //如果H列的单元格有值 { string formula = "=LEN(" + cellH.Offset[0, -3].Address + ")"; //构造公式 cellM.Formula = formula; //在M列输入公式 } } } } } ``` 在上面的代码中,我们使用Worksheet的Calculate事件来监视Excel文件的计算,每次计算时都会触发Worksheet_Calculate方法。在该方法中,我们先获取H列和M列的Range对象,然后遍历H列的每个单元格,如果该单元格有值,则根据E列的单元格地址构造公式,并将公式输入到M列相应的单元格中。最后保存Excel文件、关闭Excel文件和退出Excel应用程序即可。 与Change事件不同的是,Calculate事件会在每次计算时触发,而不是在H列输入内容或H列内容更新时触发。因此,如果你希望在H列输入内容或H列内容更新时立即置入公式,可以考虑使用Change事件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值