【问题标题】:Adding combo box across multiple cells跨多个单元格添加组合框
【发布时间】:2016-09-14 17:55:47
【问题描述】:

我需要添加组合框(ActiveX 控件)或数据验证作为下拉列表。 我有 15 个值的范围,例如高、低、中等... 已创建名为“priorityvalue”的命名范围。

我可以通过在属性中的 ListFillRange 下添加命名范围来使用组合框创建下拉列表,或者通过提供命名范围来创建数据验证列表。

但我担心的是,我需要使用上述相同值的 58 个单元格的下拉列表。为所有单元格创建组合框是一项繁琐的工作。请在这里建议我更好的选择。

数据验证列表服务于目的。但是,它使用户可以滚动浏览每个单元格上的下拉列表,这与没有输入框的组合框不同..

请推荐

【问题讨论】:

  • 认为这可能已经回答了之前follow this link
  • @DaveMac 如何修改您建议的链接中给出的代码,以便将相同的组合框添加到列中可用的所有 58 个单元格中?我很困惑。请帮忙!!
  • 单元格是一列还是多列?即它们是在同一列中下降还是跨越多列但在同一行
  • @Zac 是的,单元格位于 1 列下。我将尝试您在下面给出的代码并更新您。谢谢你
  • 没问题。如果有帮助,请不要忘记接受答案

标签: vba excel combobox macros activex


【解决方案1】:

将以下代码粘贴到 'ThisWokbook'

Private Sub Workbook_Open()

    Dim oItem As Object

    For Each oItem In Worksheets(1).OLEObjects

        If TypeName(oItem.Object) = "ComboBox" Then

            If Len(oItem.Object.Value) > 0 Then
                oItem.Object.Value = ""
            End If

        End If

    Next

    Set oItem = Nothing

End Sub

注意:对此有一些警告。上面的代码将重置工作表中的所有组合框(另外,我已将工作表设置为工作簿中的第一个工作表,您可能希望使其成为动态的)。如果您不希望它重置所有组合框而只执行通过该功能添加的组合框,则可以使用名称格式过滤您要清除的组合框

希望这会有所帮助

【讨论】:

  • 非常感谢您的帮助!
  • 不用担心,很高兴为您提供帮助
【解决方案2】:

试试这个:

Sub AddComboBoxToColumns(ByVal oRange As Excel.Range)

    Dim oOLE As OLEObject
    Dim oCell As Object

    ' Loop through all the cells in the range
    For Each oCell In oRange.Cells

        ' Add ComboBox in each cell
        With oCell

            Set oOLE = .Parent.OLEObjects.Add("Forms.combobox.1")
            oOLE.Top = .Top
            oOLE.Left = .Left
            oOLE.Width = .Width
            oOLE.Height = .Height
            oOLE.Name = "ComboBox" & .Address(False, False)
            oOLE.Object.List = Array("Test1", "Test2")

        End With

    Next

    Set oOLE = Nothing

End Sub

注意:使用要添加 ComboBox 的单元格范围调用上述函数。您必须更改数组以使用您想要的值(您可以在其中键入它们或给出现有值的范围)

【讨论】:

  • 抱歉延迟回复。我有顾虑。你让我从单元格中调用上述函数。我通过将上述代码修改为公共函数创建了一个模块,并且我试图使用公式 =cell = AddComboBoxToColumns(E1,E57) 从单元格调用。但我知道我在这里做错了,因为它的工作原理。
  • 如果我遵循的程序不是您所期望的,请帮助我。如何使用要添加组合框的单元格范围调用
  • @sady,如果您想从工作表中调用它,您可以随时在工作表中添加一个按钮并以这种方式调用它。否则,正如您所做的那样,将其添加到模块中,然后从另一个函数/子中调用它。让我知道这是否有效
  • 我对代码做了两处改动。将其更改为 public 并添加一行 Set oRange = ActiveSheet.Range("E1:E57")。非常感谢你……!!
  • 我还有最后一个问题!!打开工作簿时如何重置组合框的内容?我不想看到上次保存工作簿时使用的先前选择的值。当我打开工作簿时,我想要一个空白单元格。
猜你喜欢
  • 2012-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-25
  • 2014-12-08
相关资源
最近更新 更多