Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 在VBA中添加组合框和几个选项的简单方法,而无需用户表单?_Excel_Vba - Fatal编程技术网

Excel 在VBA中添加组合框和几个选项的简单方法,而无需用户表单?

Excel 在VBA中添加组合框和几个选项的简单方法,而无需用户表单?,excel,vba,Excel,Vba,编辑:我正在使用ActiveX组合框 我已经尝试了一段时间使用我在这里找到的不同的解决方案,但是没有一个例子对我有效。他们没有明确说明具体放在哪里 With Sheet1.ComboBox1 .AddItem "Paris" .AddItem "New York" .AddItem "London" End With 无论我把它们放在哪里,我的组合框里都没有添加任何内容 此外,这些教程中的许多似乎都在使用Userforms。我对userform不感兴趣,我只是想要一个组

编辑:我正在使用ActiveX组合框

我已经尝试了一段时间使用我在这里找到的不同的解决方案,但是没有一个例子对我有效。他们没有明确说明具体放在哪里

With Sheet1.ComboBox1
    .AddItem "Paris"
    .AddItem "New York"
    .AddItem "London"
End With
无论我把它们放在哪里,我的组合框里都没有添加任何内容

此外,这些教程中的许多似乎都在使用Userforms。我对userform不感兴趣,我只是想要一个组合框,其中包含Excel电子表格中的一些选项,根据用户在组合框中选择的值,单元格会更改其值。我想做的就是写这样的东西:

Private Sub ComboBox1_Change()
    .AddItem "Yes"
    .AddItem "Average"
    .AddItem "No"
End Sub
然后是一些大致如下的事情:

if ComboBox1 = "Yes"
then Range("D2").Value = 1

如果希望在工作表激活时加载组合框,请在VBA中的工作表对象中使用此选项:(这可能会导致组合框在工作表之间来回切换时加载重复条目。)

或者,您可以将其放置在标准模块中,并在需要时调用它:(这是我的首选方法,但我会使用数据验证,因为它更易于维护。)


工作表上的组合框是ActiveX控件吗?这会有所不同。@ZackE,是的,我使用的是ActiveX。用数据验证实现这不是更简单吗?@MathieuGuindon,你说得对,用数据验证很容易解决这个问题,但我正试图在空闲时间学习更多的VBA,这就是为什么我试图弄明白这一点。我个人在我的组合框中使用数据验证,正如@MathieuGuindon建议的那样,因为它更容易维护。最好一次加载内容。在
工作表中执行此操作。每次激活工作表时,激活将重新填充项目,并且在不首先清除列表的情况下,在工作表1和工作表2之间快速切换几次将导致下拉列表中出现相同数量的重复条目。最好的地方(IMO)是像你一样的
LoadCombo
方法,从
Workbook\u Open
处理程序调用。我完全同意@MathieuGuindon。我只是向OP展示了几个选项,因为他们想了解更多,这样他们就可以玩它来了解不同的行为。我将编辑我的答案,以显示这些信息。我不能完全让这个工作。我试图在VBA编辑器的“我的Sheet1”页面和“ThisWorkbook”页面中添加您的第一部分,但它似乎没有向对象添加“Paris”。@问题是,如果您双击实际工作表上的组合框,它是否会在工作表的
\u Change
处理程序中调出工作表代码中的VBE?如果是,下划线前的标识符是需要用来引用它的组合框的名称。如果没有,…则表示您没有使用ActiveX控件,操作方式也不同。在标准模块中创建它,确保在组合框之前限定工作表,然后调用工作簿中的子控件。打开事件。看看这是否有效。
Private Sub Worksheet_Activate()
    With ComboBox1
        .AddItem "Paris"
    End With
End Sub
Sub LoadCombo()
    With Sheet1.ComboBox1
        .AddItem "Paris"
    End With

End Sub