VBA:WithEvents 谜题

2024-01-04

我有一个用户表单,xForm,正在类模块中实例化(假设测试类) as:

'TestClass
Dim Form as New xForm
Private WithEvents EvForm as MSForms.UserForm
Set EvForm = Form

在 xForm 本身的类模块中,我有一些必须在表单关闭时执行的代码,仅当表单实际关闭时:

'xForm class module
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    'Do some cleanup, otherwise the app would hang
    'If not closing, don't cleanup anything, otherwise the app would hang
End Sub

QueryClose 事件也在 TestClass 中处理,并且可以避免表单关闭:

'TestClass
Private Sub EvForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    'Verify if closing is allowed based on User Control values
    Cancel = Not ClosingIsAllowed '<-- Pseudocode on the right side of "="
End Sub

如何测试在 xForm 类模块中的 TestClass 中设置的 Cancel = True? 让我们重新表述一下:如果 TestClass 中的 Cancel 设置为 True,则我不能在 xForm 类模块中执行清理代码。我怎样才能做到这一点?

到目前为止,我一直在考虑在 xForm 类中实现另一个事件(My_QueryClose?)并在 QueryClose 事件上引发它。在代码隐藏表单之外,我将只处理 My_QueryClose 事件,因此可以完全控制正在发生的事情。这是一种可行/更好的方法吗?


无法弄清楚您的自定义事件想法,但让一个班级与另一个班级交谈(形式或其他任何东西,并不重要)的方法是将它们链接起来;这是一个干净的例子:

基本 TestClass 保存表单对象(这里不需要事件,让表单处理)

'TestClass code
Private MyForm          As UserForm
Private mbleCanClose    As Boolean

Public Property Get CanClose() As Boolean
    CanClose = mbleCanClose
End Property
Public Property Let CanClose(pbleCanClose As Boolean)
    mbleCanClose = pbleCanClose
End Property

Public Property Get MyFormProp() As UserForm1
    Set MyFormProp = MyForm
End Property

将自定义对象和属性添加到表单本身

'UserForm1 code
Private mParent As TestClass

Public Property Get Parent() As TestClass
    Set Parent = mParent
End Property
Public Property Set Parent(pParent As TestClass)
    Set mParent = pParent
End Property

在创建 TestClass 时调用表单如下所示:

'TestClass code
Private Sub Class_Initialize()
    Set MyForm = New UserForm1
    Load MyForm
    Set MyForm.Parent = Me
End Sub

然后,当需要关闭表单时,您检查是否可以:

'UserForm1 code
Public Function WillMyParentLetMeClose() As Boolean
    If Not (mParent Is Nothing) Then
        WillMyParentLetMeClose = mParent.CanClose
    End If
End Function

Private Sub CommandButton1_Click()
    If WillMyParentLetMeClose = True Then
        Unload Me
    End If
End Sub

这是它想要调用的内容

'standard module code
Public Sub Test_TestClass()
    Dim myclass As TestClass
    Set myclass = New TestClass
    myclass.MyFormProp.Show
End Sub
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VBA:WithEvents 谜题 的相关文章

  • Vlookup 引用不同工作表中的表数据

    我想用一个VLOOKUP函数引用了放置在与所在工作表不同的工作表中的数据表VLOOKUP书面的功能 示例 在工作表 1 的单元格 AA3 中 我想插入VLOOKUP功能 我希望该函数检查单元格 M3 中的数字 在工作表 2 范围地址 A2
  • 在 C# 中,当有人插入、删除或修改记录时,如何从 MySQL 获取事件?

    我正在 WPF Net 中开发一个程序 我需要知道何时有人对数据库的任何表进行更改 这个想法是在数据库发生更改时从数据库接收一个事件 我读了很多文章 但找不到解决我的问题的方法 亲切的问候 最好的解决方案是使用消息队列 在您的应用程序向数据
  • MonoMac 窗口关闭时没有错误

    我刚刚开始在 Xamarin Studio 中使用 MonoMac 并且遇到了最奇怪的问题 我有一个带有 NSButton 和 NSTextField 的窗口 至此 我已经删除了按钮上的事件处理程序 因此它不会执行任何操作 除了在单击它时突
  • Excel 2007 从 C# get_Value 始终返回 -2146826265

    我有一个引用 Microsoft Excel 12 0 对象库的小型 C 应用程序 除此之外 它还从 Excel 单元格读取值 它从一些较旧的 Excel xls 文件和一些 2007 文件 xlsx 中读取此值 所有 xls 文件的值都会
  • 在 Python 中从 Excel 复制 YEARFRAC() 函数

    因此 我使用 python 来自动执行一些必须在 Excel 中执行的重复任务 我需要做的计算之一需要使用yearfrac 这在Python中被复制了吗 I found this https lists oasis open org arc
  • F10键没被抓住

    I have a Windows Form and there overriden ProcessCmdKey However this works with all of the F Keys except for F10 I am tr
  • 有没有办法使用 Python Pandas 读取所有行,直到遇到空行

    我在 Excel 中有很多行 并且这些行在空行之后填充有垃圾值 有没有办法使用 Python pandas 只读取 Excel 中第一个空行之前的记录 我不知道 read excel 是否可以做到这一点 如果您从 Excel 导入空行 这些
  • 从 X、Y、Z 数据、Excel 或其他工具进行 3D 绘图

    我的数据看起来像这样 1000 13 75 2 1000 21 79 21 1000 29 80 02 5000 29 87 9 5000 37 88 54 5000 45 88 56 10000 29 90 11 10000 37 90
  • Python循环遍历Excel工作表,将工作表名称添加到列表中,然后连接所有

    我正在循环遍历 Excel 工作表并将它们附加到列表中 循环完成后 我使用 Pandas 连接到单个数据帧 我遇到的问题是将工作表名称添加到适当的列表中 infile is a filepath variable xls xlrd open
  • Excel VSTO 工作簿新活动

    在 Excel 2007 的一个 Excel 插件项目中 我需要检查创建新工作簿的事件 我还需要捕捉 Workbook Open 事件 我很容易做到这一点 在我在互联网上的研究中 我发现了以下内容 打开任何工作簿时都会引发 Applicat
  • VBA将二进制图像转换为网页的base64编码字符串

    我正在尝试读取 JPG 文件并将该文件转换为 base64 编码的字符串 该字符串可用作网页上的嵌入 jpeg 我在网上发现了两个在 VBA 中进行 Base64 编码 解码的函数 它们似乎被广泛接受 编码 解码过程产生了我的原始二进制字符
  • 溢出范围:将数组转换为与 @ 的交集值

    在 Excel 引入溢出范围之前 在 运算符 可以使用 将范围 转换 为单个值0 数值 或 字符串 但 并不完全相同 假设有一列正整数从B4向南 从D2向东有一行正整数 并且 A 列和 C 列以及第 1 行和第 3 行完全是空的 目的是将单
  • 如何从shiny中将数据下载到多张纸上?

    我们如何将数据从 Shiny 下载到多个工作表并命名每个工作表 例如下面 ginberg将mtcars数据保存在sheet1中 我们可以将头部 mtcars 保存在sheet2中吗 另外 我们可以对这些工作表进行不同的命名吗 例如sheet
  • 如何在不使用外部库(如Numpy、Pandas)的情况下读取CSV文件?

    这是面试中经常出现的问题 我知道如何使用读取 csv 文件Pandas 然而 我正在努力寻找一种在不使用外部库的情况下读取文件的方法 Python 是否带有任何可以帮助读取 csv 文件的模块 你最有可能将需要用于读取 CSV 文件的库 虽
  • 如何将动态范围字符串文本传递给 EXCEL VBA 中的 SQL 查询 IN 子句

    我有动态范围字符串数据 需要通过修剪单元格和单引号和逗号分隔到 SQL 查询 A 123ABC345 234CDE678 ZSE123MTR POR123456 Result select from table name where col
  • 循环检查文本框是否不为空

    我试着For循环遍历表单上的所有控件以检查 TextBox 是否为空 然后将焦点放在第一个空文本框上 我的 Excel VBA 表单有 34 个文本框 现在它有一个嵌套的If检查所有文本框是否不为空的函数 如果还有空的 SetFocus第一
  • 如何使用apache poi检查Excel文件中的列是否隐藏

    我正在尝试使用 apache poi 解析 xls 文件 是否可以检查列是否隐藏 如何获取特定列的宽度 示例 根据帖子here https stackoverflow com questions 10529909 detecting hid
  • SVG 用事件触发动画

    如何通过 javascript 使用任意事件触发 svg 动画元素开始动画 我在想象类似的事情begin mySpecialEvent 然后我可以发送mySpecialEvent并且动画将开始 如果已经播放则再次开始 这是一篇涵盖您需要的文
  • 错误: 无法使用“localhost:10.0”作为 DISPLAY 变量的值连接到 X11 窗口服务器

    我有 2 个应用程序运行良好 除了 1 个功能的生产环境之外 此功能是从简单表格生成 Excel 在我的所有其他环境中 Excel 的生成都可以 但是当我尝试在生产环境中使用它时 我在日志中遇到了这个错误并且很顽皮错误500在我的应用程序上
  • DAO.DBEngine 类不再在使用 Windows 10 的 MS Access 2016 中注册

    客户端最近从 Windows 7 升级到 10 并从 Access 2013 迁移到 2016 包含在 Office 365 中 Excel 中的 VBA 宏现在会生成以下错误 运行时错误 2147221164 80040154 类未注册

随机推荐