vba - 检测 Excel 上运行时添加的组合框上的事件

标签 vba excel events combobox

我的 Excel 中的 VBA 脚本有问题。我所做的基本上是创建按钮,按下这些按钮将在其中一个工作表中创建一组两个额外的组合框。连续按下此按钮可以添加更多组合框。

这些新创建的组合框的行为如下:

  1. 已创建 2 个组合框
  2. Combobox1 将在控制表中加载一些列表
  3. 每当选择 Combobox1 中的某个项目时,Combobox2 都会加载要添加到 Combobox2 的项目列表

添加按钮的代码是这样的

 Sub Add_Criteria()

       Dim controlNum As Integer
       Dim name1 As String
       Dim name2 As String
       Dim oOle1 As OLEObject
       Dim oOle2 As OLEObject
       Dim uniqueString As String

       Dim cb1 As Object

        controlNum = Sheets("Controls").Range("A16").Value

        'adding Control
        Set oOle1 = Sheets("System").OLEObjects _
            .Add(ClassType:="Forms.ComboBox.1", Left:=10, _
            Top:=75 + (controlNum * 20), Width:=100, Height:=18)
        Set oOle2 = Sheets("System").OLEObjects _
            .Add(ClassType:="Forms.ComboBox.1", Left:=120, _
            Top:=75 + (controlNum * 20), Width:=100, Height:=18)

        'adding properties
        oOle1.Name = "Criteria" & controlNum * 2 - 1
        oOle2.Name = "Criteria" & controlNum * 2

        'adding control var
        Sheets("Controls").Range("A16").Value = controlNum + 1

        With oOle1.Object
           .List = Sheets("Controls").Range("A5:A13").Value
        End With

  End Sub

问题是,我无法检测到其上的事件。我需要更改组合框1 中的值更改时创建的第二个组合框上显示的值。我尝试使用下面的引用,但仍然不能。谁能指导我如何做到这一点

引用(已经解决这个问题好几天了):

http://www.dbforums.com/microsoft-excel/1641165-detecting-click-event-dynamically-created-controls.html (这是针对用户表单的,我不知道为什么我不能在工作表中复制它)

最佳答案

您可以通过编程方式添加事件。下面的代码为每个组合框添加一个事件

此引用来自 Pearson Programming The VBA Editor可能也有用。

enter image description here

Sub Add_Criteria()

    Dim controlNum As Integer
    Dim name1 As String
    Dim name2 As String
    Dim oOle1 As OLEObject
    Dim oOle2 As OLEObject
    Dim uniqueString As String
    Dim cb1 As Object
    Dim strCode As String
    Dim vbProj As Object
    Dim vbCodeMod As Object

    Set vbProj = ActiveWorkbook.VBProject
    Set vbCodeMod = vbProj.vbcomponents(ActiveSheet.CodeName).codemodule

    controlNum = Sheets("Controls").Range("A16").Value

    'adding Control
    Set oOle1 = Sheets("System").OLEObjects.Add(ClassType:="Forms.ComboBox.1", Left:=10, Top:=75 + (controlNum * 20), Width:=100, Height:=18)
    Set oOle2 = Sheets("System").OLEObjects.Add(ClassType:="Forms.ComboBox.1", Left:=120, Top:=75 + (controlNum * 20), Width:=100, Height:=18)


    vbCodeMod.AddFromString AddEvent(oOle1.Name)
    vbCodeMod.AddFromString AddEvent(oOle2.Name)


    'adding properties
    oOle1.Name = "Criteria" & controlNum * 2 - 1
    oOle2.Name = "Criteria" & controlNum * 2

    'adding control var
    Sheets("Controls").Range("A16").Value = controlNum + 1

    With oOle1.Object
        .List = Sheets("Controls").Range("A5:A13").Value
    End With

End Sub

Function AddEvent(strIn As String) As String
    AddEvent = "Private Sub " & strIn & "_Click()" & Chr(10) & _
              "MsgBox ""Event Added""" & Chr(10) & _
              "End Sub"
End Function

关于vba - 检测 Excel 上运行时添加的组合框上的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9476481/

相关文章:

excel - 从VBA调用Powershell脚本(带参数)

vba - 循环单元格并添加到范围

excel - 连接两个单元格但值序列不准确

php - 如何将mysql表数据写入excel文件但不下载只存储文件

wpf - 关闭命令 WPF

excel - 根据包含行号的变量在 Excel 中选择单元格

arrays - 循环将值复制到数组中

regex - 如何开发包含正则表达式的 Excel 宏,以便它可以在 Windows 和 Mac 上运行

Android 检测来自任何应用程序的触摸状态

c# - WPF MVVM 事件订阅