在用户窗体中使用类模块变量(需要错误“424”对象)

2023-12-28

我有一个类模块,其中托管有一个 worksheet_change 子项,并且在该子项中必须弹出一个用户表单。我想在用户窗体的代码中使用类模块中的许多变量。然而,无论我做什么,我都无法让它发挥作用。

我尝试应用该方法这个非常长的指南 https://excelmacromastery.com/vba-class-modules/#Class_Module_Properties,但无济于事。 SO 上的其他线程无法帮助我。

Private cell As Range

Public WithEvents m_wb As Workbook

Property Get cellr() As Range
    Set cellr = cell
End Property

Property Set cellr(cellrange As Range)
    Set cell = cellrange
End Property

Public Property Set Workbook(wb As Workbook)
    Set m_wb = wb
End Property

Public Property Get Workbook() As Workbook
    Set Workbook = m_wb
End Property

Public Sub m_wb_SheetChange(ByVal Sh As Object, ByVal Target As Range) 'simplified, but accurate
    Application.EnableEvents = False

    For each cell in Target
        ReplaceTask.Show
    Next cell

    Application.EnableEvents = True
End Sub

In the userform_initialize宏,我需要能够获取该宏的名称m_wb工作簿以及单元格(最好是range变量,否则只是地址)For each cell in Target环形。对于下面代码中的每个变量我得到

需要错误“424”对象

这表明变量不是公开的..

Private Sub UserForm_Initialize()
Debug.Print cellrange.Address
Debug.Print cell.Address
Debug.Print cellr.Address
Debug.Print m_wb.Name
'....

我确信我无法理解这些属性是如何工作的,这阻碍了我。如果有人能指出我做错了什么,拜托!


为了完成这项工作,它至少需要一个类类型的公共对象变量。并且该对象变量必须设置为类的新实例。那么这个对象变量,并且只有这个对象变量,才是类的公共可访问实例。

Example:

让你的班级被命名clsWorkbook并具有以下代码:

Option Explicit

Private m_cell As Range

Private WithEvents m_wb As Workbook

Property Let cell(cellrange As Range)
    Set m_cell = cellrange
End Property

Property Get cell() As Range
    Set cell = m_cell
End Property

Public Property Let Workbook(wb As Workbook)
    Set m_wb = wb
End Property

Public Property Get Workbook() As Workbook
    Set Workbook = m_wb
End Property

Private Sub m_wb_SheetChange(ByVal Sh As Object, ByVal Target As Range) 'simplified, but accurate
    Application.EnableEvents = False

    For Each m_cell In Target
        ReplaceTask.Show
    Next m_cell

    Application.EnableEvents = True
End Sub

让您的用户表单命名为ReplaceTask有以下代码:

Option Explicit

Private Sub UserForm_Initialize()
 Debug.Print oWB.Workbook.Name
 Debug.Print oWB.cell.Address
End Sub

在默认模块中有以下代码:

Option Explicit

Public oWB As clsWorkbook

Public Sub test()
 Set oWB = New clsWorkbook
 oWB.Workbook = ThisWorkbook
End Sub

现在,之后Sub test()运行后,请更改代码所在工作簿中的工作表中的某些内容。这应该会触发Sub m_wb_SheetChange(ByVal Sh As Object, ByVal Target As Range)你的类对象oWB然后,它显示了也可以访问的用户表单oWB.Workbook.Name and oWB.cell.Address.


因为关于需要一个全局实例的讨论clsWorkbook让我们有一个完整的例子,可以重建它并展示如何clsWorkbook可以是私有类成员:

让你的班级被命名clsWorkbook并具有以下代码:

Option Explicit

Private m_cell As Range

Private WithEvents m_wb As Workbook

Property Let Cell(cellrange As Range)
    Set m_cell = cellrange
End Property

Property Get Cell() As Range
    Set Cell = m_cell
End Property

Property Let Workbook(wb As Workbook)
    Set m_wb = wb
End Property

Property Get Workbook() As Workbook
    Set Workbook = m_wb
End Property


Private Sub m_wb_SheetChange(ByVal Sh As Object, ByVal Target As Range) 'simplified, but accurate
    Application.EnableEvents = False

    Dim frm As ReplaceTask
    For Each m_cell In Target
        Set frm = New ReplaceTask
        frm.Init Me
        frm.Show
    Next m_cell

    Application.EnableEvents = True
End Sub

让您的用户表单命名为ReplaceTask有以下代码:

Option Explicit

Private m_ParentClass As clsWorkbook

Friend Sub Init(ByVal p As clsWorkbook)
    Set m_ParentClass = p
    Me.Caption = p.Workbook.Name & " : " & p.Cell.Address
End Sub

并在默认类模块中ThisWorkbook有以下代码:

Option Explicit

Private oWB As clsWorkbook

Private Sub Workbook_Open()
    Set oWB = New clsWorkbook
    oWB.Workbook = Workbooks.Open("P:/Mappe1.xlsx")
End Sub

Now the clsWorkbook在工作簿打开时被实例化,并且是ThisWorkbook它的工作簿成员是额外打开的工作簿。那里有SheetChange被聆听者clsWorkbook oWB实例。

并且因为ReplaceTask用户表单被实例化clsWorkbook并且被赋予类实例作为参数,该用户表单也知道类成员。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在用户窗体中使用类模块变量(需要错误“424”对象) 的相关文章

  • 在Excel中显示毫秒

    我正在尝试在 Excel 宏中显示毫秒 我有一列整数 它们是以毫秒为单位的时间戳 例如 28095200 是上午 7 48 15 200 我想在它旁边创建一个新列 以保持运行平均值并以hh mm ss 000格式 Dim Cel As Ra
  • Sharepoint Server 对于 Excel Services 或 Excel Web Access 是必需的吗

    Excel Services 和 Excel Web Access 随 Microsoft Office SharePoint Server 2007 一起提供 我想知道是否可以在不运行 Sharepoint Server 的情况下使用 E
  • 向用户显示多条验证消息

    在 MS Access 中 如何将从 SELECT 语句检索到的行存储在数组中 并在一个消息框中显示多行 Dim rSEL rSUM rDes As DAO Recordset Dim vItem id vQnty vSum As Inte
  • Java加减法与金钱

    我正在尝试对美元和美分进行加法和减法 但在超过 100 美分和低于 0 美分时遇到困难 我的代码可以很好地添加任何内容 直到我需要将 100 美分转换为 1 美元 我无法将我的话转化为代码 但我知道需要做什么才能将美分转换成美元 仅供参考
  • Excel宏隐藏特定单元格和合并区域

    我试图根据另一个单元格的值隐藏特定单元格 到目前为止 我设法隐藏整行 但无法隐藏特定单元格 Local Currency value show hide item If Range Currency Value USD Then Range
  • 用于导出到 CSV/Excel 的数据 URI(无服务器端请求):浏览器支持/限制?

    以下问题 Javascript 或 Flash 导出至 CSV Excel https stackoverflow com questions 8150516 javascript or flash export to csv excel
  • 从单元格中具有多种颜色的单元格中提取字体颜色

    我有一个 Excel 工作表 我正在尝试将其存入 MySQL 数据库 我使用 VBA 将数据作为文本写入文件 然后将其上传到数据库 在工作表的单元格中 有一些已用颜色编码的字符串 颜色具有一定的含义 因此当我将值移入数据库时 我想保留它们
  • 在 ASP.Net Core 2.0 中导出到 Excel

    我曾经使用下面的代码在 ASP NET MVC 中将数据导出到 Excel Response AppendHeader content disposition attachment filename ExportedHtml xls Res
  • 以编程方式将参数传递到访问报告中

    我有一个现有的 Access MDB 我正在向运行现有报表的现有表单添加一个命令按钮 所做的更改是 此按钮需要传入一个包含正在报告的记录 ID 的参数 当前报告在 MDB 中的每条记录上运行 我已经更改了报告运行的查询 以使用 ID 值参数
  • java中如何找到class文件的包

    我正在编写一个使用 class 文件的 java 程序 我希望能够读取文件系统上的 class 文件 使用 InputStream 并确定它所在的包 该 class 文件可能不在一个好的包目录结构中 它可能位于某个随机位置 我怎样才能做到这
  • 在 VBA 中从范围创建数组

    我遇到了一个看似基本的问题 但找不到任何资源来解决它 简而言之 我只想将一系列单元格 所有一列 的内容加载到数组中 我能够通过以下方式完成此任务 DirArray Array Range A1 Range A2 但由于某种原因 我无法以这种
  • 如何通过VBA宏遍历Word文档中的文本

    我想通过宏来计算 Word 文档中的字符 我不知道如何获取 Visual Basic 宏中文本的两个参考并浏览它 我想计算文档中每个字符的数量 例如文档中 ABZBB A x 1 B x 3 Z x 1 Sub Macro1 Dim Box
  • 检查工作表是否存在,如果不存在则创建-VBA [重复]

    这个问题在这里已经有答案了 我已经测试了许多代码 这些代码检查工作表是否存在 基于名称 如果不存在则创建一个 其中一些循环所有工作表 一些引用工作表 如果创建错误则意味着该工作表不存在 哪一种是最合适的 正统的 更快的方式来完成这个任务 目
  • 有没有办法在javascript中代理(拦截)一个类的所有方法?

    我希望能够在类本身的构造函数内代理类的所有方法 class Boy constructor proxy logic do something before each call of all methods inside class like
  • 在 PHP 中使用可变变量是不好的做法吗?

    例如 一个简单的MVC类型系统 api class method使用重写为 PHP 变量 htaccess nginx conf 然后做类似的事情
  • openpyxl 2.4.2:保存后公式生成的单元格值为空

    我使用 openpyxl 打开文件 编辑一些单元格并保存更改 这是一个例子 import openpyxl book openpyxl load workbook sheet path sheet book active for row i
  • 宏VBA获取Outlook 2003中选定的文本

    我正在尝试使用此代码片段来获取 Outlook 2003 中选定的文本 Sub SelectedTextDispaly On Error Resume Next Err Clear Dim oText As TextRange Get an
  • 类属性在功能上依赖于其他类属性

    我正在尝试使用静态类属性来定义另一个静态类属性 我认为可以通过以下代码来实现 f lambda s s 1 class A foo foo bar f A foo 然而 这导致NameError name A is not defined
  • 从 SpatialPolygons 和其他 sp 类中提取要素坐标

    Package sp为不同的空间概念 点 线 多边形 提供了许多类 对于某些类 访问要素坐标很简单 例如SpatialLines 所有示例均取自相应课程的帮助页面 l1 cbind c 1 2 3 c 3 2 2 l1a cbind l1
  • 从新的 xlsx 文件中删除宏

    功能部分 下面的代码将 xlsm 文件中的 2 个选项卡保存到新的 xlsx 文件中 文件保持打开状态以进行编辑 错误 xlsm 选项卡在工作表代码中有触发器 该触发器无效 一旦在 xlsx 工作表中输入任何内容 就会导致错误 所需输出 编

随机推荐

  • Django 业务逻辑和视图逻辑分离

    有人可以解释一下以下内容的含义吗 业务逻辑属于模型 但视图逻辑属于视图 每个的一般区别是什么以及一些例子 谢谢 您可以在其他问题的评论中提问 商业逻辑是与 事物 如何工作或运作相关的任何事物 以下面为例 class Animal Objec
  • 为什么单个结构化查询每批运行多个 SQL 查询?

    为什么以下结构化查询会运行多个 SQL 查询 如 Web UI 的 SQL 选项卡中所示 import org apache spark sql streaming OutputMode Trigger import scala concu
  • Spring eureka 仪表板在 Wildfly 上返回 XML

    我正在尝试在 Wildfly 部署我的尤里卡服务 但是当我尝试访问仪表板时 我得到以下 xml 作为响应
  • 用 PHP 或 Java 实现大型(1GB 或更多)文件上传网站的最佳方法是什么?

    用 PHP 或 Java 实现大型 1GB 或更多 文件上传网站的最佳方法是什么 使用 PHP 或 Java 中的默认上传方式会导致 RAM 空间不足 并且网站速度会急剧下降 在客户端打开文件 将其全部内容读取到内存中 关闭它 然后开始发送
  • 在docker容器中创建D盘

    是否可以在 docker Windows 容器中创建一个驱动器号不是 C 的新分区 我需要一个 D 和一个 E 驱动器来存放某些软件 我不认为你可以从现有的图像中做到这一点 但如果你制作一个像这样的 Dockerfile FROM dotn
  • 如何使用选择菜单和 link_to 重定向到另一个页面 - Ruby on Rails

    我想使用选择菜单重定向到另一个页面 但是当我选择 主页 时 它不会将我重定向到主页 什么都没发生
  • 有没有办法读取 clojure 文件中的所有表单?

    If I use gt
  • ListAdapter修改数据源(这是一个arraylist)

    这是我最近遇到的一个问题 我有一个带有自定义适配器类的列表视图 适配器接受列表视图并用其中的元素填充列表视图 现在 我想在列表视图的每一行上有一个按钮来从中删除项目 我应该如何解决这个问题 有没有办法远程触发活动类中的方法并调用适配器上的n
  • 使用 AppleScript 拆分全屏应用程序

    我一直在使用这个脚本 https gist github com dsummersl 4175461在 Automator 中 它可以在全屏和窗口模式之间切换应用程序 我经常使用分屏应用程序 El Capitan 中引入 那么有什么方法可以
  • 通过添加哈希来防止查询字符串操作?

    为了保护 Web 应用程序免受查询字符串操作的影响 我正在考虑向每个 url 添加一个查询字符串参数 该参数存储所有其他查询字符串参数和值的 SHA1 哈希值 然后根据每个请求的哈希值进行验证 此方法是否提供强大的保护以防止用户操纵查询字符
  • 低通滤波器编程

    我已经用 Java 编写了一个 Sega Master System 模拟器 尽管这个问题不是 Java 特有的 并且已经完成了除 SN76489 声音芯片之外的所有内容 该芯片如何发出声音很简单 我遇到的问题是将其转换为可通过 PC 笔记
  • 使用门户更改 Azure 应用程序设置,无需重新启动

    我有时会这样 在 Azure 门户中 我转到 应用程序服务 然后单击我的 Web 应用程序 然后转到 应用程序设置 在这里 我更改了 应用程序设置 列表中的一个值 例如 我将 128 更改为 129 最后我点击 保存 这会导致我的网络应用程
  • 姜戈·格拉佩利错误

    我对姜戈 格拉佩利有意见 它似乎加载 CSS 得很好 但样式似乎 关闭 也许一些图片可以澄清我的意思 我刚刚遇到了这个 你需要确保 grappelli 出现在之前 django contrib admin in INSTALLED APPS
  • KnockoutJS - 更新视图模型/映射插件

    如何更新完整的 viewModel 在页面加载时 我得到一个模型并使用转换它ko mapping fromJS myObject 到一个视图模型 如果用户单击按钮我想从服务器获取更新的数据 现在我想应用这些更新 如果我使用ko applyB
  • 使用 EnvDTE.ExecuteCommand 以编程方式开始调试特定项目

    我有一个包含多个启动项目的解决方案 我试图每晚自动重新启动其中一个项目 同时将新进程附加到同一个调试器 我能够重新启动该过程 使用Process Start 并将当前调试器附加到其上 但到目前为止它的可靠性还不是很高 并且根据设计 单击 停
  • 是否可以禁用自动完成功能?

    我知道我不应该这样做 但向客户解释您应该通过浏览器进行操作可能会更容易 他们有一台公共计算机和一台以管理员帐户 我正在编写的代码 在计算机上运行的服务器 他们希望人们输入他们的信息 但他们不希望有人按下电子邮件输入框来显示人们的电子邮件地址
  • Chrome 打包应用程序中的 Google Drive Realtime API

    有谁知道如何使用Google 云端硬盘实时 API https developers google com drive realtime application in a Chrome 打包应用程序 https developer chro
  • 什么是 .episode 文件..?

    JAXB 中的 episode 文件是什么 它是由 JAXB 生成的 还是我们操纵的配置文件 以避免 JAXB 重新生成相同的类 Note 我是EclipseLink JAXB MOXy https wiki eclipse org Ecl
  • 如何确保在 Android N 及更高版本上设备重新启动时调用PeriodicWorkRequest

    我最近尝试使用WorkManager s PeriodicWorkRequest这是在后台定期获取用户位置更新的可靠方法 该库满足了我的要求 这个特殊的细节引起了我的注意 即使应用程序或设备重新启动 也能保证任务执行 实现并测试它后 我尝试
  • 在用户窗体中使用类模块变量(需要错误“424”对象)

    我有一个类模块 其中托管有一个 worksheet change 子项 并且在该子项中必须弹出一个用户表单 我想在用户窗体的代码中使用类模块中的许多变量 然而 无论我做什么 我都无法让它发挥作用 我尝试应用该方法这个非常长的指南 https