处理运行时创建的 OLEObject 命令按钮的事件

2024-01-30

我已经为这个问题苦苦挣扎了一段时间......我想做一些非常简单的事情。我想在运行时创建多个命令按钮,然后用一个过程处理这些命令按钮的事件。所以我构建了一个“withevents”类来处理自动化,但我的代码不起作用。当我运行 Test() 时,会创建 CommandButton,但是当我单击它时...没有消息框响应...我找不到错误...请提供任何帮助!

c测试类

Public WithEvents Button As MSForms.CommandButton

Public Sub Button_Click()
s = MsgBox("Hello", vbOKOnly)
End Sub

Module 1

Public TestCollection As Collection

Sub Test()

Set TestCollection = New Collection
Dim Btn As CommandButton
Dim OLEBtnObj As cTest
Set OLEBtnObj = New cTest
Set Btn = Sheet1.OLEObjects.Add(ClassType:="Forms.CommandButton.1", link:=False,_ DisplayAsIcon:=False, Left:=368.25, Top:=51, Width:=44.25, Height:=24).Object
Set OLEBtnObj.Button = Btn
TestCollection.Add Item:=OLEBtnObj

End Sub

我有一个相当不切实际的解决方案。要测试它,请将以下代码放入图纸类模块(见附图)。这Me.CodeName指的是代码名称 https://learn.microsoft.com/en-us/office/vba/api/excel.worksheet.codename的片材。

对于每个新的 Sheet1 按钮,将添加一个新处理的事件。该事件处理程序将执行公共事件处理程序并将单击的命令按钮的名称传递给它。

' Standard Module
Sub test()
  ' adds three buttons to Sheet1 with click-event handlers
  Sheet1.AddButton
  ActiveCell.Offset(5, 0).Activate
  Sheet1.AddButton
  ActiveCell.Offset(5, 0).Activate
  Sheet1.AddButton
End Sub

' Sheet1 Class Module
Option Explicit

' Add Microsoft Visual Basic For Applications Extensibility

Public Function AddButton() As MSForms.CommandButton
  Dim msFormsCommandButton As MSForms.CommandButton
  Set msFormsCommandButton = Me.OLEObjects.Add(ClassType:="Forms.CommandButton.1").Object
  CreateEventHandler msFormsCommandButton.Name
  Set AddButton = msFormsCommandButton
End Function

Private Sub CommonButton_Click(ByVal buttonName As String)
  MsgBox "You clicked button [" & buttonName & "]"
End Sub

Private Sub CreateEventHandler(ByVal buttonName As String)
    Dim VBComp As VBIDE.VBComponent
    Dim CodeMod As VBIDE.CodeModule
    Dim codeText As String
    Dim LineNum As Long
    
    Set VBComp = ThisWorkbook.VBProject.VBComponents(Me.CodeName)
    Set CodeMod = VBComp.CodeModule
    LineNum = CodeMod.CountOfLines + 1

    codeText = codeText & "Private Sub " & buttonName & "_Click()" & vbCrLf
    codeText = codeText & "  Dim buttonName As String" & vbCrLf
    codeText = codeText & "  buttonName = """ & buttonName & "" & vbCrLf
    codeText = codeText & "  CommonButton_Click buttonName" & vbCrLf
    codeText = codeText & "End Sub"
    CodeMod.InsertLines LineNum, codeText
End Sub

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

处理运行时创建的 OLEObject 命令按钮的事件 的相关文章

  • 在 DownloadProgressChanged 事件期间从 DownloadFileAsync 对事件处理程序的更新缓慢

    我的问题 我正在编写一个 PowerShell 脚本 在继续执行其他任务之前 该脚本需要从远程 Web 服务器下载几个大文件 我的项目要求之一是显示每次下载的进度 以便最终用户知道发生了什么 对另一个 SO 问题的回复包含一个使用注册事件和
  • =MATCH() 等价于多维范围

    我有一个 Excel 工作表 其中单元格 A1 C20 INT RAND 10 这是我的数据范围 单元格 E1 1 E2 2 E3 3 等 这些是我试图找到的值 我设置单元格 F1 MATCH E1 A C 0 F2 MATCH E1 A
  • Excel VBA 中.Delete 和.Clear 的区别?

    有什么区别Worksheets 1 Cells Delete and Worksheets 1 Cells Clear 我问这个是因为我一直用 Clear清除我的工作表内容 但在我之前的帖子中我发现Worksheets 1 Cells De
  • 使用 If 语句执行 Do Until 直到达到特定值

    我正在处理一份大数据表 我需要代码从特定单元格中减去 直到该值大于某个数字 如果这个数字没有达到 我希望它变成0 例如如果A3 A2 gt Q5 then E3 A3 A2 if lt Q5 do A3 A1 如果这不起作用E2 0 我需要
  • 延迟宏以允许事件完成

    在尝试从宏内访问外部 API 函数集时 我发现有必要添加延迟 以便外部 API 有时间处理选择 实现这一点会带来一些困难 因为使用 Application Wait 或 Application Sleep 不起作用 在线搜索让我尝试使用 G
  • 在 jQuery 中强制执行一个事件

    To all 我已经为小数位创建了一个向上和向下计数器 当发生更改时 我使用以下代码强制模糊事件重新计算字段 button click function var decPlaces document calculator dpv value
  • 导出到 Excel 时如何避免“数字存储为文本”

    当我将表格从 Access 导出到 Excel 时 所有数字都显示为文本 并且单元格上有绿色箭头 有没有办法自动修复此错误 或者有另一种导出方法可以解决该错误 作为参考 这是我导出的方式 DoCmd TransferSpreadsheet
  • 在 MS Outlook 中,报告所有未收到回复的已发送邮件

    我每天都会发送大量电子邮件 但常常无法跟踪哪些邮件得到了实际回复 有没有办法使用 VBA 脚本查看上周发送的所有消息 并检查他们是否收到回复 具体来说 是一份已发送电子邮件的报告 这些电子邮件尚未从至少一个发送到的地址收到回复 我了解一点
  • 文本到行 VBA Excel

    我有一个电子表格 其中包含大约 4000 行数据 其中一列数据具有唯一的订单号 我希望使用 作为分隔符将其分隔 所以本质上我想要 Name Order Date Jane 123 001 111 08 15 2013 Gary 333 12
  • 如何模拟“焦点”和“打字”事件

    尝试模拟 onfocus 和打字事件 但它不起作用 Sub Login MyLogin MyPass Dim IEapp As InternetExplorer Dim IeDoc As Object Dim ieTable As Obje
  • 在 Excel 表格中选择多列的代码

    我是 Excel VBA 新手 我需要修改我的代码 以便我能够进一步进行 我想在 Excel 表格中选择多个表格列 这是我的代码 Dim ws As Worksheet Dim tbl As ListObject Set ws Sheets
  • VBA Shell 并等待退出代码

    我正在打包一个办公应用程序 VBA 它调用 C 控制台应用程序来执行应用程序 大型模拟程序 的一些繁重工作 我希望能够让 VBA 应用程序等待控制台应用程序完成并从控制台应用程序检索退出代码 我已经能够做到前者 但尚未能够从应用程序中检索退
  • 每次调用新方法时触发事件

    我正在做一个logger for a c 应用程序需要记录每个方法被调用的时间以及每个方法执行时间 我可以通过调用自己的方法来做到这一点EventLogger LogMethodCall方法在每个方法的开头 但我想知道是否有办法使CLR每次
  • 将包含宏的工作簿复制到不带宏的工作簿

    我能够复制工作簿 复制到所需位置 其中在后台包含宏 该副本还包含相同的宏 我的问题是我不希望这个重复的工作簿包含宏 谁能告诉怎么做吗 先感谢您 将您的工作簿保存为无宏 即简单地保存为 Excel 工作簿 对于我的 Excel 2007 这是
  • 标志状态的 VBA 替换

    根据文档 Outlook 中的 MailItem FlagStatus 属性是已弃用 https msdn microsoft com en us library microsoft office interop outlook maili
  • 虚拟乐器 iPhone 应用程序中的 VoiceOver 辅助功能?

    我收到盲人用户的评论 称我的一些声音和音乐相关应用程序只能在关闭 VoiceOver 的情况下使用 在 iOS 设备上启用 VoiceOver 辅助功能后 是否可以启用音乐键盘或鼓垫触摸区域 以便在点击键盘键或虚拟鼓组 等 时可以立即播放音
  • 获取当前 VBA 函数的名称

    对于错误处理代码 我想获取发生错误的当前 VBA 函数 或子函数 的名称 有谁知道如何做到这一点 编辑 谢谢大家 我曾希望存在一个未记录的技巧来自行确定函数 但这显然不存在 我想我会保留当前的代码 Option Compare Databa
  • 手动触发触摸事件

    我搜索了过去30分钟 但没有找到解决方案 我想触发一个touchstart元素上的事件 这会触发touchstart event var e document createEvent MouseEvent e initMouseEvent
  • 如何使用 VBA 添加 MS Outlook 提醒事件处理程序

    我想扩展 MS Outlook 以便当弹出日历提醒时 我可以运行一个可以运行外部程序 如批处理脚本 的 VBA 挂钩 就我而言 我想将提醒 转发 到 Linux 桌面 因为我在这两种环境中工作 并且 Windows 桌面并不总是可见 我看到
  • 在 Excel 中使用 VBA 设置图像透明度

    有没有办法使用 VBA 脚本对图像应用一些透明度 我录制了一个 宏 但似乎没有录制艺术效果 我已经找到了如何制作形状 但没有找到图像 这需要几个步骤 将自选图形 如矩形 放置在工作表上 使用以下方法将您的实际图片嵌入矩形中 ShapeRan

随机推荐

  • 将用户控件属性绑定到自定义类

    在我的应用程序中我使用的是usercontrol称为 ChannelControls 我在主窗口上实例了 6 次 public partial class ChannelControls UserControl CMiXData cmixd
  • 根据 Haskell 列表中 n 的条件删除元素 n-1、n 和 n+1

    假设我有一个包含所有整数的列表2 to 20 2 20 我想使用函数过滤列表f x 或者它是一个谓词 我不太习惯 Haskell 编程中使用的所有术语 如果元素在位置n对于该函数等于 truef 我想删除位置上的元素n 1 n and n
  • char 的 a += b 运算符的实现与 a = a + b 相同吗? [复制]

    这个问题在这里已经有答案了 发现一个有趣的问题 以下代码运行时会产生不同的结果 char c a c a passed c c a Cannot implicitly convert type int to char An explicit
  • Discord.py - 使用命令更改前缀

    我想创建一个命令 管理员可以更改命令的前缀 例如 他们可以将其更改为 而不是使用 并且只有 才能工作 我可以设置只有管 理员才能使用该命令的权限 我环顾四周 通过文档和互联网 但没有找到任何东西 而且我不知道如何做到这一点 您应该使用com
  • 将片段添加到列表视图项中

    我想为列表视图中的每个项目都有一个片段 因为我想分离出一些逻辑 我为每个项目使用一个视图持有者 如果视图不存在 我将创建一个新片段并将其添加到容器中 holder mMyFragment new MyFragment mActivity t
  • SQL Server:如何检查字段是否具有“NULL”或“NOT NULL”约束?

    谁能告诉我是否有一种方法可以以编程方式确定 Micorosft SQL Server 数据库表字段是否具有 NULL 或 NOT NULL 约束 我需要这个 以便我可以部署一个可以安全重新运行的补丁 所以我正在寻找这样的东西 概念 伪代码
  • HiltAndroidApp/HiltViewModel IDE 中的“未解析的参考”,但它仍然可以构建而不会出现错误

    所以我按照以下步骤进行操作https developer android com training dependency injection hilt android https developer android com training
  • 将正斜杠替换为双引号内的双反斜杠

    我拼命地尝试替换正斜杠 用双反斜杠括在双引号 but a echo var sed s sed s g 不起作用 我不知道为什么 它总是只替换一个反斜杠而不是两个 When 是您想要替换为的正则表达式的一部分s 替代 命令sed 您可以在命
  • Java Regex - 使用单个美元捕获字符串,但当它有两个连续的美元时则不会

    我已经发布this https stackoverflow com questions 58821727 java regex java util regex search for dollar sign早点问 但这还没有结束 那里适用的所
  • 如何解决500内部服务器错误? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 当我使用 ajax 调用时 我收到 500 内部服务器错误 是什么导致了这个问题 如何解决呢 调试 修复和解决来自 Ajax 调用的服
  • 结构一字节对齐与架构的对齐要求冲突?

    我之前发过一个问题here https stackoverflow com questions 13881487 should i worry about the alignment during pointer casting comme
  • Android - 使用我的应用程序打开 Gmail 附件

    我需要使用我的应用程序打开具有自定义扩展名的文件 当文件位于我的 SD 卡中时 我可以使用 Intent 过滤器来执行此操作 如果文件作为 Gmail 附件发送 我还可以查看 下载 和 预览 按钮 但是 当我单击下载 预览按钮时 我收到消息
  • 删除某些内容后如何在 OS X Yosemite 上恢复 python?

    我想我之前是通过homebrew安装了python 这不是一个好主意 但我做到了 which python Library Frameworks Python framework Versions 2 7 bin python sudo r
  • 如何在标准 ML 中检查整数的以 2 为底的表示形式? [复制]

    这个问题在这里已经有答案了 我正在尝试在 SML 中实现重复平方算法 我希望它是尾递归的 目标是将所有 x k 相乘 其中 k 是 2 m 2 m 是 n 的二进制表示形式中的 1 例如 对于 x 25 计算 x 1 x 8 x 16 因为
  • 打印两次

    我出于教学目的编写了一个简单的程序 除了打印出名称和您选择的计算答案的部分之外 一切正常 if 语句似乎执行了两次 就好像它在前进之前向后退了一步 它将打印出 您想继续吗 但不会提示用户输入是 否 而是会再次打印出计算的答案 然后询问他们是
  • CodeDom:编译部分类

    我正在尝试编译文本文件中的代码以更改 WinForms 应用程序主窗体上的 TextBox 中的值 IE 将另一个带有方法的分部类添加到调用表单中 该表单有一个按钮 button1 和一个文本框 textBox1 文本文件中的代码是 thi
  • 错误:_handle onLaunch iOS 9 中的特定操作

    我在 iOS 9 上收到以下错误 UIApplication handleNonLaunchSpecificActions forScene withTransitionContext completion unhandled action
  • PHP - 将 MS Word 特殊字符(^l、^p、^s)更改为“,”

    所以我拥有的是一个 MS Word docx 文件 其中包含一些未真正排序的数据 示例输出 1 姓氏 名字 地址 城市 州邮政编码 通过执行 Ctrl Shift 我可以查看文件中存在的所有特殊字符 ETC 然后用 替换它们作为分隔符 然后
  • MDX SSAS - 最大测量日期

    只需要在多维数据集中的所有测量中获取最大日期即可 例如 DateID is a Dimention Measure First Measure Second Measure 如何获取列表MAX DateID 来自我的立方体中的所有措施 以下
  • 处理运行时创建的 OLEObject 命令按钮的事件

    我已经为这个问题苦苦挣扎了一段时间 我想做一些非常简单的事情 我想在运行时创建多个命令按钮 然后用一个过程处理这些命令按钮的事件 所以我构建了一个 withevents 类来处理自动化 但我的代码不起作用 当我运行 Test 时 会创建 C