检测组合框更改Excel VBA

检测组合框更改Excel VBA,excel,vba,combobox,dropdown,Excel,Vba,Combobox,Dropdown,我有一个带有一堆组合框(表单控件)的工作表,我想检测用户何时更改其中任何一个组合框并在单元格中写入文本。在目标单元格上使用工作表\u更改无效。我试过很多不起作用的东西。我不确定私有子行或if语句中需要包含什么 Private Sub DropDowns_DropButtonClick() If ActiveSheet.DropDowns.Value > 1 Then Cells(13, 5).Font.Bold = True Cells(13, 5).Font.Color

我有一个带有一堆组合框(表单控件)的工作表,我想检测用户何时更改其中任何一个组合框并在单元格中写入文本。在目标单元格上使用工作表\u更改无效。我试过很多不起作用的东西。我不确定私有子行或if语句中需要包含什么

Private Sub DropDowns_DropButtonClick()
If ActiveSheet.DropDowns.Value > 1 Then
    Cells(13, 5).Font.Bold = True
    Cells(13, 5).Font.Color = vbRed
    Cells(13, 5).Value = "!!! Selections have been changed. !!!"
End If
End Sub
我试过了

ComboBox_AfterUpdate()
还有我能找到的任何东西。我在if语句中也尝试了一些不同的东西,但没有成功

谢谢你的帮助


Chris

以下是如何将宏分配给组合框(右键单击组合框>分配宏),如注释部分中提到的@BigBen:

Option Explicit

Sub DropDown1_Change()
    Dim sht As Worksheet
    Dim dd As DropDown
    Set sht = ThisWorkbook.Worksheets("Name of your Worksheet") 'Name of the worksheet in which the combobox is located
    Set dd = sht.DropDowns("Drop Down 1") 'name of your combobox
    sht.Range("G1").Value = "The selected value is: " & dd.List(dd.Value) 'dd.value returns the index of the selected value
End Sub
您可以对每个组合框使用相同的代码。 出于演示目的,我使用了以下设置:


您可以轻松地修改代码,使其最符合您的需要。

以下是如何将宏分配给组合框(右键单击组合框>分配宏),如@BigBen在评论部分所述:

Option Explicit

Sub DropDown1_Change()
    Dim sht As Worksheet
    Dim dd As DropDown
    Set sht = ThisWorkbook.Worksheets("Name of your Worksheet") 'Name of the worksheet in which the combobox is located
    Set dd = sht.DropDowns("Drop Down 1") 'name of your combobox
    sht.Range("G1").Value = "The selected value is: " & dd.List(dd.Value) 'dd.value returns the index of the selected value
End Sub
您可以对每个组合框使用相同的代码。 出于演示目的,我使用了以下设置:


您可以轻松地修改代码,使其最适合您的需要。

如果我没有看错,您的组合框是用户表单。如果我是正确的,只需在“Visual Basic”中打开您的用户表单,然后双击相关的组合框。这将打开“代码”窗格并创建一个名为“Private Sub()”的空私有子例程

输入代码,将工作表中的数据(或任何您想要的数据)放入子例程,Bob应该是您的叔叔

如果我错过了什么,请提前道歉

兰诺克洛布

编辑

好的,我错了,这是一个表单控件

我的第一个评论是,如果你能。。。但是,对于表单控件,是否应该(a)使用“格式控件”下拉列表(“控件”选项卡)中的单元格链接框将结果放置在单元格中。。。但是,该结果将不是框的内容,而是一个整数,该整数等于所选条目在combobox中条目列表中的位置。然后,您需要(b)向组合框分配一个宏,该组合框将拾取结果并使用它从包含条目列表的范围中获取所需信息。就像我说的,使用activex控件要容易得多


RannochRob

如果我读对了,那么您的组合框是用户表单。如果我是正确的,只需在“Visual Basic”中打开您的用户表单,然后双击相关的组合框。这将打开“代码”窗格并创建一个名为“Private Sub()”的空私有子例程

输入代码,将工作表中的数据(或任何您想要的数据)放入子例程,Bob应该是您的叔叔

如果我错过了什么,请提前道歉

兰诺克洛布

编辑

好的,我错了,这是一个表单控件

我的第一个评论是,如果你能。。。但是,对于表单控件,是否应该(a)使用“格式控件”下拉列表(“控件”选项卡)中的单元格链接框将结果放置在单元格中。。。但是,该结果将不是框的内容,而是一个整数,该整数等于所选条目在combobox中条目列表中的位置。然后,您需要(b)向组合框分配一个宏,该组合框将拾取结果并使用它从包含条目列表的范围中获取所需信息。就像我说的,使用activex控件要容易得多


RannochRob

直接将宏分配给组合框?表单中的生活更简单。如果你制作了一个合适的表格,那么所有这些事件都会起作用。我在一张纸上有63个,在另一张纸上有207个,这对于每个框的单个宏来说太多了。谢谢你的建议。直接给组合框指定一个宏?表单中的生活更简单。如果你制作了一个合适的表格,那么所有这些事件都会起作用。我在一张纸上有63个,在另一张纸上有207个,这对于每个框的单个宏来说太多了。谢谢你的建议。嗨,谢谢你的主意。我在一张纸上有63个组合框,我需要这个,在另一张纸上有207个,这有点太多宏了,所以我要寻找一种方法来同时查看它们。这对我来说并不重要,所以如果没有一个简单的方法,我就不用担心了。嗨,谢谢你的想法。我在一张纸上有63个组合框,我需要这个,在另一张纸上有207个,这有点太多宏了,所以我要寻找一种方法来同时查看它们。这对我来说并不重要,所以如果没有一个简单的方法,我就不用担心了。谢谢。如果我搞不清楚,这不是什么大问题。在我现在的工作表开发中,返回并将近300个组合框更改为active x是不值得的。谢谢。如果我搞不清楚,这不是什么大问题。我现在在工作表的开发中,不值得回去将近300个组合框更改为activex。
DropsDowns_Change()
Option Explicit

Sub DropDown1_Change()
    Dim sht As Worksheet
    Dim dd As DropDown
    Set sht = ThisWorkbook.Worksheets("Name of your Worksheet") 'Name of the worksheet in which the combobox is located
    Set dd = sht.DropDowns("Drop Down 1") 'name of your combobox
    sht.Range("G1").Value = "The selected value is: " & dd.List(dd.Value) 'dd.value returns the index of the selected value
End Sub