【问题标题】:Select next item from combobox and click on a button Excel VBA从组合框中选择下一个项目,然后单击 Excel VBA 按钮
【发布时间】:2017-04-07 09:13:08
【问题描述】:

在 Excel 工作表上放置一个组合框和命令按钮。 Combobox 会列出一些项目,比如说它有 1、2、3、4、5。当第一次加载组合框时,默认情况下会选择第一个值,即 1。

现在使用 VBA 宏,我想从组合框列表中选择下一个值(即 2)并单击命令按钮。

我用谷歌搜索了这个,但不幸的是,没有得到我期望的结果。

这是我到目前为止所拥有的,但它并没有达到我的预期(上面解释过):在If Worksheets("QC Update").ComboBox1.SelectedIndex < ComboBox1.Items.Count - 1 Then 线上收到一条错误消息,因为 Object 不支持此属性或方法

Sub Select_Next_Items() 
  If IsEmpty(Range("A9").Value) = True Then 
    If Worksheets("QC Update").ComboBox1.SelectedIndex < ComboBox1.Items.Count - 1 Then 
      ComboBox1.ListIndex = 0 ' select first Item in listbox 
      ComboBox1.ListIndex = ComboBox1.ListCount - 1 ' selects last item 
      Set ComboBox1.SelectedIndex = Worksheets("QC Update").ComboBox1.SelectedIndex + 1 
      Set ComboBox1.ListCount = 0 
    End If     
  End If 
End Sub

【问题讨论】:

  • 到目前为止你尝试过什么?你必须向我们展示一些努力;请参考How to Ask
  • 尝试工作表类中的 oleobjects 对象
  • 它有什么作用?你有什么错误吗?请编辑您的问题,不要使用 cmets。

标签: excel combobox vba


【解决方案1】:

希望你们在这里不要感到被冒犯,因为我有一个更清晰和更直接的答案。

ComboBox1.ListIndex = ComboBox1.ListIndex +1

这里有一个更完整的。因此,我们必须考虑它何时位于列表的末尾

If ComboBox1.ListIndex = ComboBox1.ListCount -1 Then
   ComboBox1.ListIndex =1 

Else
   ComboBox1.ListIndex = ComboBox1.ListIndex +1

希望我的回复对大家有帮助,尤其是刚接触Vba,急需使用的朋友。

如果你有扎实的 C++/java 编程背景,这很容易理解

【讨论】:

    【解决方案2】:

    我想知道这是不是你的意图。

    Sub Select_Next_Item()
        ' 07 Apr 2017
    
        Dim Ws As Worksheet
        Dim Cbx As OLEObject
        Dim Ix As Integer
    
        Set Ws = Worksheets("QC Update")
        If IsEmpty(Ws.Range("A9").Value) = True Then
            Set Cbx = Ws.OLEObjects("ComboBox1")
            With Cbx.Object
                Ix = .ListIndex + 1
                If Ix = .ListCount Then Ix = 0
                If .ListCount Then .ListIndex = Ix
            End With
        End If
    End Sub
    

    如果发现单元格 A9 为空,代码将查看“ComboBox1”(如果在同一个指定工作表上找不到它,则会崩溃)。它将将该组合框中的选择更改为列表中的下一个值。但如果它已经在最后一个列表项,它将选择第一个,如果组合框中没有列表项,它将什么也不做。

    【讨论】:

    • 感谢您的回复,我刚刚将工作表名称修改为我的工作表名称并尝试运行它。它给了我一个错误,因为下标超出范围Set Ws = Worksheets("Update_QC.xlsm")
    • "Update_QC.xlsm" 看起来像一个文件名。 Ws 必须是工作表。最好使用真实姓名,但是对于您的初始测试,您可以将代码设置为Set Ws = ActiveSheet
    【解决方案3】:

    这个问题终于用下面的代码解决了,

    Set Cbx = Worksheets("QC Update").OLEObjects("ComboBox1")
            With Cbx.Object
                Ix = .ListIndex + 1
                If Ix = .ListCount Then Ix = 0
                If .ListCount Then .ListIndex = Ix
            End With
    

    【讨论】:

      【解决方案4】:

      我分享我的简单解决方案

          Try
              ComboBoxDireccion.SelectedIndex = ComboBoxDireccion.SelectedIndex + 1
          Catch ex As Exception
              ComboBoxDireccion.SelectedIndex = 0
          End Try
      

      【讨论】:

      • 代码转储不能提供好的答案。你应该解释如何为什么这可以解决他们的问题。我推荐阅读,“How do I write a good answer?"。这可以帮助未来的用户学习并最终将这些知识应用到他们自己的代码中。当代码被解释时,你也可能会得到用户的积极反馈/赞成。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-15
      • 2015-12-23
      • 1970-01-01
      • 2013-02-03
      • 1970-01-01
      • 1970-01-01
      • 2020-11-18
      相关资源
      最近更新 更多