直接把这个模块的代码与 Jupyter Notebook 的 .ipynb 文件放在一起,然后在 Jupyter 里面像导入普通模块那样导入即可,如下图所示: ?...重新运行这个 Cell 中的代码,代码中虽然有from analyze import FathersAnalyzer,看起来像是重新导入了这个模块,但是运行却发现,它运行的是修改之前的代码。...这是因为,一个 Jupyter Notebook 中的所有代码,都是在同一个运行时中运行的代码,当你多次导入同一个模块时,Python 的包管理机制会自动忽略后面的导入,始终只使用第一次导入的结果(所以使用这种方式也可以实现单例模式...在每一个 Cell 里面都需要 重新加载一次分析模块,否则,很有可能在你单独运行某一个 Cell 的时候,用的是老的代码,就会导致难以察觉的 bug。...当然,你还可以进一步偷懒,把特殊代码缩减为2行: %load_ext autoreload %autoreload 2 %autoreload后面的参数被设置为2时,每次运行任意一个 Cell,都会自动重新加载所有
VBA是基于Visual Basic语言的简化版本,适合编程新手和高级用户。为什么学习VBA?学习VBA有助于提升工作效率,特别是在处理大量数据和重复性任务时。...在Excel中,您可以通过“录制宏”功能来生成宏代码,也可以手动编写代码。模块模块是存储VBA代码的容器。在Excel中,每个工作簿都可以包含多个模块。模块分为标准模块和类模块。...在VBA中,变量有不同的数据类型,如整数(Integer)、字符串(String)和布尔值(Boolean)等。定义变量时,可以使用Dim关键字。...VBA编程的基础知识掌握以下基础知识有助于更好地理解和编写VBA代码。Excel对象模型在VBA中,Excel对象模型是最核心的部分。它定义了Excel中的各种对象及其属性、方法和事件。...VBA提供了多种调试工具,如:断点:在代码中特定行设置断点,暂停代码执行。即时窗口:在代码运行时查看和修改变量值。监视窗口:监视变量和表达式的值。
数据验证是确保用户不会输入无效数据的过程,例如在输入数字时应输入文本。 13.你应该在何处放置工作簿级别事件的事件过程? 在ThisWorkbook模块中。...14.如何定义在一天的特定时间执行的代码? 使用OnTime事件。 15.如何允许用户查看工作簿但不能进行修改? 通过在“另存为”对话框的“工具”菜单中设置“修改权限密码”。...16.是非题:保护工作簿的密码可防止用户查看你的VBA代码。 错误。必须使用“项目工程属性”对话框中的“保护”选项卡,将VBA工程与设置给工作簿的任何密码分开锁定。...没有Excel程序,但安装了Excel查看器,也可以运行Excel应用程序。 25.自定义VBA类的代码放在哪里? 在一个类模块中。 26.是非题:自定义VBA类可以包含可视化界面。 错。...31.类方法与常规VBA过程有何不同? 除了在类模块中之外,没有什么不同。 32.什么是辅助方法? 仅应从类内部而不是类外部的代码调用的方法。 33.在销毁对象之前触发了什么事件?
有三类事件: 事件始终是用户操作的结果,例如单击用户窗体上的控件或按某个键 用户操作或VBA代码可能引起的事件,例如打开工作簿或激活图表 与用户操作无关的事件,例如一天中的特定时间的发生 总体而言,Excel...切勿在代码模块(这些项目模块在“工程”窗口的“模块”节点下列出)中放置事件过程。 ? 图22-1:在代码编辑窗口输入事件过程 事件顺序 处理事件时,你需要了解某些操作会导致触发Excel中的多个事件。...在这些情况下,多个事件以特定顺序发生。在某些情形下,确定用于代码的事件过程时,需要注意这个顺序。...下面是一个示例:将在工作簿中添加新工作表时,将按以下顺序触发下列三个应用程序级事件: 当添加新的工作表时,将发生WorkbookNewSheet。...当事件过程中的代码直接或间接导致再次触发同一事件时。 下面是一个例子。 只要修改工作表中的数据,就会触发Worksheet_Change事件。
消息中会提醒用户:“此文档是在以前版本的Microsoft Office Word中创建的。若要查看或编辑此文档,请单击顶部栏上的“启用编辑”按钮,然后单击“启用内容”。”...对于Zloader,恶意软件会使用Word中的信息更新电子表格单元格的内容。Word文档可以读取下载的.XLS文件中特定Excel单元格的内容,然后使用基于Word的VBA指令填充Excel文档。...接下来,Word文件会通过写入检索到的内容,在下载的Excel文件中创建一个新的VBA模块。...在禁用信任访问后,恶意软件将创建并执行一个新的Excel VBA,然后触发Zloader的下载行为。...毫无疑问,恶意文档一直是大多数恶意软件家族的初始感染入口,这些攻击也在不断演变和升级其感染技术以及混淆技术。因此,我们建议广大用户,仅当接收到的文档来自可信来源时才启用宏功能,这样才是安全的。
step three Excel 工作簿中的 VBA 代码通常保存在工作表对象或模块中。本例中,我们用模块保存 VBA 代码。...首先选中左侧工程列表中的工作簿,后右键,在弹出的选项列表中,选择「插入」。二级菜单中,选择「模块」,完成插入新模块。 插入完成后,在工程列表对应工作簿内,在模块文件夹下,显示新插入的模块。...新插入的模块的默认名称是,模块 x,本例中是模块1。在属性窗口,可以修改模块的名称。 step four 打开模块 双击上一步插入的模块1,在右侧代码窗口区域里,将打开模块1的代码编辑器。...插入/删除模块 在一个 VBA 工程中想要插入新的模块时,可在 VBA 工程右键,选择插入类型即可。...在实际使用过程中可能需要修改,符合最新的需求。过一段时间再打开查看时,可能已经忘记了当时的思路,不能很快想起来有些代码实际的用途,更不用说让别人查看了。这时,就需要注释出场了。
单击“文件——选项”,在“Excel选项”对话框中,选择左侧的“自定义功能区”,在“主选项卡”中,找到并选取“开发工具”前的复选框,如下图2所示。 图2 “开发工具”选项卡出现了,如下图3所示。...当你添加或删除工作簿或工作表时,这个树状结构会相应地变化。你也可以添加标准模块、类模块和用户窗体,此时该树状结构会相应更新。...图9 当你在该工作簿中新添加工作表时,会触发该事件。我们在其中输入代码: MsgBox “HelloWorld!” 如下图10所示。...图10 MsgBox能够给用户提供一条消息,本示例中是在用户在本工作簿中新建工作表时,会弹出一条消息“HelloWorld!”。...图12 保存包含VBA代码的工作簿 在保存含有VBA代码的工作簿时,我们需要使用xlsm扩展名,如下图13所示,否则Excel会自动删除代码。
图19 方法9:从VBE的运行菜单中运行VBA 在VBE中,首先将光标置于要运行的过程代码中,然后单击顶部菜单“运行——运行子过程/用户窗体”,如下图20所示。...图20 方法10:从VBE工具栏中运行VBA 在VBE中,首先将光标置于要运行的过程代码中,然后单击顶部调试工具栏中的“运行——运行子过程/用户窗体”按钮,如下图21所示。...End Sub 注意,将独立功能的代码或者重复的代码放置在单独的过程中,然后通过其它过程调用,这是一种好的编程习惯。 方法13:从工作表事件中调用VBA过程 可以基于事件来自动运行宏。...图22 这段代码在工作表Sheet1代码模块中,当工作表Sheet1中的单元格A1发生变化会自动调用testVBA过程。 方法14:从超链接中运行VBA 单击超链接时触发宏运行,如下图23所示。...方法15:从工作簿事件中调用VBA过程 基于工作簿事件,例如打开或关闭工作簿时自动运行宏。如下图24所示。 图24 你还知道有什么运行Excel VBA的方法吗?
当代码与此应用程序的版本或体系结构不兼容(例如文档中的代码面向 32 位 Microsoft Office 应用程序,但它试图在 64 位 Office 上运行)时,通常会发生此错误。...可能的解决方案: (1)如果您具有访问文档或项目中的 VBA 代码的权限,请先取消对该模块的保护,然后再次运行该代码以查看具体的错误。...(2)如果没有访问文档中 VBA 代码的权限,请与文档作者联系,让作者更新隐藏模块中的代码。...只有在 64 位版本的 Microsoft Office 中运行 VBA 代码时,才需要修改 VBA 代码。...(5) 双击刚才要解密的VBA工程窗体,发现已经可以查看之前受保护的模块代码了。
VBA简介&用途 Visual Basic for Applications(VBA),是依附在应用程序(例如Excel)中的VB语言。...文件——选项——自定义功能区——勾选开发工具 2、打开VBA的三种方式 (1)开发工具——Visual Basic (2)ALT+F11快捷键 (3)右键sheet页查看代码 3、VBA界面 写一个简单的...VBA程序 大部分程序入门都会写一个代码输出“Hello World”,我们写第一个程序在选定的单元格输出自己的昵称。...Sub 插入文字() 'sub定义一个过程 Selection.Value = "TOMOCAT" '代码块 End Sub '结束一个过程 1、新建模块 模块方便我们导出代码用于其他的Excel...,所以养成良好的编程习惯插入模块 2、 在指定区域编写代码 执行代码 下面三种方法实现的功能相同,无须太纠结,选择最方便的即可 1、F5执行 2、按执行按钮 3、运行——运行子过程 一点小建议——使用“
下面我就以威胁分析员的角度来介绍几种技术 VBA stomping VBA 在 Office 文档中可以以下面三种形式存在 1、源代码: 宏模块的原始源代码被压缩,并存储在模块流的末尾。...通过信息收集得知目标的 Office 版本,利用 VBA stomping 使宏被特定版本的 Office 打开时才会执行恶意行为宏代码,除此之外的 Office 版本打开时执行正常宏代码 目前 VBA...2007(x86) 8800 2010(x86) 9700 2013(x86) A300 2016(x86) AF00 在 VBA 编辑器中隐藏宏 可以在 VBA 编辑器中隐藏真正的宏,只需要修改 PROJECT...在 VBA 编辑器中,NewMacros 已经消失了,宏正常执行 ?...分析此类样本时可以使用 rtfobj 来查看 Ole 对象 ? -s 和 -d 参数 dump 出指定的嵌入对象,接着使用 Olevba 快速分析 ?
Mimikatz模块,可直接从内存中提取Windows LSASS进程中的明文密码哈希。...例如,以下是一段真实样本中的VBA片段(经脱敏):Sub AutoOpen()Dim x As String, y As Objectx = "P" & "o" & "w" & "e" & "r" &...只有当它尝试注入进程、创建远程线程或调用敏感API(如SetWindowsHookEx用于键盘记录)时,才可能触发行为告警。...在东南亚,一家越南头部电商平台于2026年1月初通报安全事件:多名客服收到“法务部”邮件,要求查看“客户投诉附件”。...宏执行、PowerShell行为监控的高级邮件网关(如Trend Micro、Proofpoint),在隔离环境中触发恶意逻辑。
标签:VBA,工作表事件 这是在www.vbaexpress.com中看到的一个示例,实现了自己以前想做而未做的事情。...也就是,模仿Excel的撤销功能,特别是当VBA代码对工作表进行操作后,使用Excel原始的撤销功能是无法恢复的,但可以使用VBA代码来实现,似乎就像Excel的撤销功能一样。...注意,本文的示例只针对特定区域,且只能撤销两次。...在ThisWorkbook模块中,输入下面的代码: Private Sub Workbook_Open() Dim endRow As Long With Sheets("UNDO") endRow...xlUp).Row If endRow > 1 Then .Range("A2:D" & endRow).ClearContents End If End With End Sub 在操作的工作表相应的代码模块中输入下面的代码
---- VBE编辑器及VBA代码输入和调试的基本知识 在学习这些实例的过程中,最好自已动手将它们输入到VBE编辑器中调试运行,来查看它们的结果。...图00-06:刚打开VBE编辑器时的窗口 可以在“工程资源管理器”中双击任一对象打开代码窗口,或者选择菜单“插入——模块”或“插入——类模块”来打开代码窗口。...图00-08:VBE编辑器窗口(带有用户窗体) 在VBE编辑器中输入VBA代码 如前所述,您可以选择VBE菜单“插入——用户窗体/模块/类模块”来插入模块或用户窗体以及相应的代码窗口。...此外,您也可以在“工程资源管理器”中单击鼠标右键,从弹出的菜单中选择“插入——用户窗体/模块/类模块”来实现上面的操作。在获取相应的代码模块窗口后,就可以输入VBA代码了。...调试VBA代码 在VBE编辑器的菜单中,有两项与调试运行有关的菜单项,即“调试”菜单和“运行”菜单,它们提供了各种调试和运行的手段。在我现阶段进行代码调试时,常用到的有以下几个: ■ 逐语句。
在某种条件时触发开关,导致后续的动作结果,比如灯亮起或关闭,电热水器开始或停止加热,空调定时打开或关闭等等。 “Excel事件”在VBA程序中也担当了开关的角色。...1、工作簿事件 工作簿事件是发生在特定的工作簿中,工作簿事件代码必须在Thisworkbook对象代码模块中编写,比如open(打开工作簿),beforeclose(关闭工作簿)和sheetactive...2、工作表事件 工作表事件发生在特定的工作表中,工作表事件代码必须在对应工作表的代码模块中编写,比如change(更改工作表中的单元格)和selcetchange(工作表上的选定区域发生改变)等。...三、事件代码编写位置 在介绍本节之前,通常编写代码都是模块中,即在工程资源管理窗口中,鼠标右键单击,插入/模块,之后在模块中编写相应的代码。 但编写事件代码时,需要相应的对象的模块中编写。...窗体创建后,编写窗体和代码的事件代码时,就需要打开窗体的代码窗口。在窗体上双击即可。或者在工程资源管理器,右侧选中相应的窗体,示例中只有一个即userform1。鼠标右键单击选择查看代码。
在标准VBA模块中编辑回调过程,永久地重新利用“剪切”控件的功能: 'Callback for Cut onAction Sub MyCut(control As IRibbonControl, ByRef...然而,如果用户不单击控件或者使用合适的Alt+键来触发控件(本例中,Alt+H+X触发剪切控件),被重新利用的控件不会总是按意图工作。例如,仍然可以通过使用Ctrl+X键组合来访问剪切功能。...也可以临时覆盖内置控件的功能,并通过简单地设置回调过程中的参数cancelDefault为False来重新恢复其功能。...有时,在单击特定的内置控件时,可能想采取必要的操作。例如,如果被打印的页数超过100,那就中断打印。...:continue to print End Sub 说明:本专题系列大部分内容学习整理自《Dissectand Learn Excel VBA in 24 Hours:Changingworkbook
AutoOpen 函数在文档打开时自动触发。...此外,恶意软件还会利用时间延迟技术,在执行关键操作前等待足够长的时间,以绕过基于时间触发的沙箱分析。...一旦数据窃取完成,或者攻击者认为已经掌握了足够的谈判筹码,便会触发勒索软件模块。该模块会对系统中的文件进行高强度加密(通常采用AES+RSA混合加密算法),导致业务系统瘫痪。...例如,当Word进程启动PowerShell子进程,或可疑进程尝试注入系统进程时,EDR应立即阻断并报警。...在检测到Amnesia RAT活动时,应立即断开受感染主机的网络连接,防止数据进一步外传或勒索软件扩散。
2.VBA程序如何修改双击间隔? 3.是非题:KeyDown事件过程可以使用KeyCode参数判断用户输入的是4还是$。 4.KeyDown事件过程中的代码如何取消按键?...10.当用户在任何工作表中进行修改操作时,将触发哪个事件? 11.用户如何阻止打开工作簿时触发Open事件? 12.什么是数据验证? 13.你应该在何处放置工作簿级别事件的事件过程?...14.如何定义在一天的特定时间执行的代码? 15.如何允许用户查看工作簿但不能进行修改? 16.是非题:保护工作簿的密码可防止用户查看你的VBA代码。 17.是非题:一个bug阻止程序运行。...18.程序在何时应该使用OptionExplicit语句? 19.什么是断点? 20.调试命令“逐过程”和“逐语句”之间有什么区别? 21.当程序在断点处暂停时,确定程序变量当前值的最快方法是什么?...30.如何在代码中引用对象属性? 31.类方法与常规VBA过程有何不同? 32.什么是辅助方法? 33.在销毁对象之前触发了什么事件? 如果有兴趣,可以在留言中写下你的答案。
本系列一直强调要善用各种工具,作为本系列的最后一节,那么这次就用一例子说明如何让Python结合Vba,直接在Excel中动态获取各种处理条件,输出结果。...---- ---- 最后,定义一个方法,让 vba 调用。如下图: 这个方法的上方套上一个 xlwings 的装饰器 @xw.func。表示这个方法需要注册到 Vba 模块中。...时,已经有一个 xlwings.xlam文件。...如下图: 点一下上图红框部分,即可注册你的 py 文件中的自定义方法到 vba 中。 他大致原理是读取 py 文件中的方法,然后相应在 vba 中生成名字和参数一样的 vba 方法。...xlwings 模块是 xlwings 自动生成的,我们不需要去改动。 xlwings_udfs 模块就是你在功能区点击导入按钮时生成的。同样不需要去改动。
正如本文开头提到的,也可以在满足某条件时在运行时动态地隐藏(和取消隐藏)内置组。这样的例子包括:选择了图表工作表、选择了特定的工作表、从组合框中选择了特定项、以及勾选了网格线复选框。...例如,下面的示例XML代码和在标准VBA模块中的代码在运行时满足某条件时隐藏(和取消隐藏)“对齐方式”组: ? customUI元素包括带有Initialize回调过程的onLoad属性。...在Custom UI Editor中保存该文件,首次在Excel中打开时,会出现关于Initialize和HideAlignmentGroup过程的错误消息提示,因为这两个过程仍然没有在标准的VBA模块中找到...在标准VBA模块中的VBA代码: Public myRibbon As IRibbonUI 'Callback for customUI.onLoad Sub Initialize(ribbon As...在标准VBA模块中的VBA代码: Public myRibbon As IRibbonUI 'Callback for customUI.onLoad Sub Initialize(ribbon AsIRibbonUI