Excel VBA 事件过程实现数据变化结果也会随之自动更新

2022-10-07 深圳推广 技术文档

我们知道,在Excel中进行公式运算时,随着单元格数据的变化,公式单元格中的结果也会随之自动更新,如下面简单的演示。

Excel VBA中有一类称作“事件”的过程程序,能够对我们的操作自动作出相应的响应。例如,每次打开工作簿时,自动弹出一个设定好的信息框。

这是响应工作簿的Open事件,即在打开工作簿时Excel所发生的行为。

在VBE编辑器中,单击工作簿或者工作表模块,然后在代码输入窗口顶部左侧列表框中选择工作表对象名,在右侧列表框中会出现供选择的相应的事件。通常,在左侧列表框中选择对象名后,Excel会自动在代码输入窗口中放置默认的事件,如工作表的SelectionChange事件。

事件响应所执行的操作就是我们在事件过程中放置的代码,这些代码规定了我们希望事件发生时要做什么。

在《Excel实战技巧8:基于当前单元格实时显示相关数据记录》中,当用户在工作表第1列含有数据的单元格中移动时,会自动弹出一个窗体,并显示该单元格所在行的详细信息。

这里就是使用了工作表的SelectionChange事件,其代码如下:

Dim lngRow As Long

Private SubWorksheet_SelectionChange(ByVal Target As Range)

   Dim rngBottom As Range

   With wksUserInfo

        '查找列A中最后使用的单元格

        Set rngBottom = .Range("A"& .Rows.Count).End(xlUp)

   End With

   '卸载原来的用户窗体

   If lngRow <> Target.Row Then

        Unload ufmUser

   End If

   '当前单元格位于第1列且具有数据时才显示用户窗体

   If Target.Column = 1 And Target.Row > 1 And Target.Row <=rngBottom.Row Then

        ufmUser.Show 0 '无模式窗体

   End If

   '填充用户窗体

   '在工作表单元格发生改变后能实时反映到用户窗体中

   ufmUser.PopulateRecord

   '更新用户窗体显示

   '当活动单元格变化后,显示该单元格所在行的内容

   lngRow = Target.Row

End Sub

注意到,事件过程含有参数,允许将相应的值通过参数传递给事件过程。例如本例中的参数Target,将当前单元格传递到过程。

有时候,一个事件可能触发其他事件,包括该事件本身,从而带来连锁反应。例如,修改工作表单元格中的数据时,会触发Worksheet_Change事件,此时如果事件中的代码修改了另一个单元格中的数据,那么会再次触发该事件,再该事件会再次修改单元格,这引起事件的又一次触发,如此反复循环。这往往不是我们所需要的。

可以使用:

Application.EnableEvents = False

临时禁止触发事件,从而防止发生这类情形。当达到目的后,再重新启用触发事件:

Application.EnableEvents = True

例如:

Private Sub Worksheet_Change(ByValTarget As Range)

   Application.EnableEvents = False

   If Target.Column = 1 Then

        Range("C1") = Target.Value

   End If

   Application.EnableEvents = True

End Sub

Excel定义了与工作簿对象、工作表对象等相关的一系列事件,还可以使用VBA自定义事件。一般来说,常使用的Excel事件有:

Excel应用程序事件,即根据Excel本身的操作来响应的事件,例如响应新建工作簿的NewWorkbook事件。

工作簿事件,即根据操作工作簿的动作来响应的事件,例如打开工作簿的Open事件。

工作表事件,即根据操作工作表的动作来响应的事件,例如选取工作表单元格变化时的SelectionChange事件。

图表事件,即操作图表时响应的事件,例如激活图表时的Activate事件。

后面的内容将主要讲解工作表事件,其他事件将在后续讲到相应的内容时再详细讲解

  • pascal语言是面向过程还是面向对象
    hover

    pascal语言是面向过程还是面向对象

    pascal语言是一种面向过程的编程语言,它侧重于算法和数据处理过程,不具备面向对象编程的特性,如对象、类和消息传递。 Pascal语言是面向过程还是面向对象? Pascal语言是面向过程的编程语言。 面向过程的特点: 强调算法和数据的···

    2024-04-10
  • iPhone 16 Pro或有更大机身 苹果也会升级摄像头功能
    hover

    iPhone 16 Pro或有更大机身 苹果也会升级摄像头功能

    苹果在2024年有庞大的更新计划,不少产品都等待升级,包括OLED版iPad Pro机型、M3版MacBook Air、以及iPhone 16系列等。其中iPhone 16系列是不少人关注的产品,传闻外观设计、摄像头和按键布局等方面都会有所改变。 苹果可能···

    2024-03-06
  • 怎么关闭win10自动更新
    hover

    怎么关闭win10自动更新

    关闭win10自动更新的方法:1、通过Windows设置关闭自动更新;2、通过服务关闭自动更新;3、通过任务计划关闭自动更新。详细介绍:1、通过Windows设置关闭自动更新,打开Windows设置,按下“Windows键”并选择“设置”,选择“更新和安全”···

    2024-01-15
  • Microsoft解释每日Edge点数奖励计划变化的原因
    hover

    Microsoft解释每日Edge点数奖励计划变化的原因

    上周末,Microsoft Rewards删除了每天价值20分的“Edge搜索”,引起了用户的愤怒和困惑。今天早些时候,几个Microsoft Rewards任务也减少到个位数,导致一些人认为该计划可能会被关闭,但这远非事实。 在与Windows Latest的对话中,Micr···

    2023-12-01
  • chatglm3使用过程
    hover

    chatglm3使用过程

    chatglm3使用步骤:1、登录并进入ChatGLM3的界面;2、在对话框中输入问题;3、ChatGLM3会根据输入的问题,从预训练模型中提取相关信息,并生成回答;4、用户可以对回答进行反馈;5、ChatGLM3会根据用户的反馈,再次提取相关信息,并···

    2023-11-29
  • office有pdf软件吗
    hover

    office有pdf软件吗

    office没有pdf软件,但是Office套件中的一些应用程序是可以处理PDF文件的。Office中可以处理pdf的软件如下:1、Word会将PDF文件转换成可编辑的Word文档格式,可以对文档进行修改、格式设置和其他编辑操作;2、Excel会将PDF文件转换成···

    2023-11-13
  • win11怎么激活office
    hover

    win11怎么激活office

    win11激活office的步骤如下:1、点击“文件”菜单中的“账户”选项,然后选择“登录”;2、使用Microsoft 账户和密码登录后,Office 将被自动激活;3、点击“开始”按钮,然后选择“设置”选项。;4、在“设置”窗口中,选择“应用”选项,然后点击···

    2023-10-18
  • 如何永久关闭win10自动更新
    hover

    如何永久关闭win10自动更新

    永久关闭win10自动更新的步骤:1、打开“设置”;2、进入“更新和安全”;3、点击“Windows 更新”;4、修改更新设置;5、设置活动小时;6、打开运行,输入“services.msc”并点击“确定,找到并双击“Windows 更新”服务;7、停止和禁用服务;8···

    2023-08-23
在线客服 13691917840 提交需求 二维码