为组合框设置一些属性(滚动,编辑,跳转)

时间:2011-10-16 19:07:31

标签: excel forms excel-vba vba

我想为一些VBA形式组合框设置3个属性,我不知道是否可能。 我不想让组合框可编辑。现在,如果用户在其中键入提交表单的内容,它将发送该值...我想让他只选择我在Combobox中添加的值。 我想让组合框中的项目列表可滚动。现在,如果我使用滚动条,我可以滚动列表,但我不知道为什么我不能用鼠标滚动滚动。 如果我开始打字,我想跳到某个项目。假设我在一个组合框中有一年中的几个月...如果我开始输入mar我希望它跳到游行。我知道对于html表单,这个属性是默认的,但我不知道VBA表单... 非常感谢

2 个答案:

答案 0 :(得分:2)

在您想要的行为中,有些可以使用Combo上的设置,有些则需要编码

  1. 月份列表:在(隐藏)工作表上放置条目列表并命名范围。将.RowSource设置为该范围
  2. 在您输入时匹配:设置属性.MatchEntry = fmMatchEntryComplete.MatchRequired = True
  3. 拒绝非列表条目:具有这些设置的组合将允许您键入无效条目,但在提交时将弹出错误消息拒绝它。如果您想在键入时静默拒绝无效数据,则需要对其进行编码。
  4. 如果您希望将所选值返回到工作表,请将.ControlSource设置为单元格地址(最好是指定范围)
  5. 通过“...滚动鼠标滚动...”我认为你的意思是鼠标滚轮。 Unfortunatley Forms不支持鼠标滚轮滚动。你必须自己编写代码。在here(我自己还没试过)
  6. 有一个Microsoft补丁

    静默拒绝无效条目的示例代码

    Private Sub cmbMonth_Change()
        Static idx As Long
        Dim Match As Boolean
        Dim i As Long
    
        If cmbMonth.Value = "" Then Exit Sub
        If idx = 0 Then idx = 1
        i = idx
        Match = False
        For i = 0 To cmbMonth.ListCount
            If cmbMonth.List((i + idx - 1) Mod cmbMonth.ListCount) Like cmbMonth.Value & "*" Then
               cmbMonth.ListIndex = (i + idx - 1) Mod cmbMonth.ListCount
               Match = True
               Exit For
            End If
        Next
        If Not Match Then
            cmbMonth.Value = Left(cmbMonth.Value, Len(cmbMonth.Value) - 1)
        End If
    End Sub
    

答案 1 :(得分:1)

将组合框的属性MatchEntry设置为1(fmMatchEntryComplete),将MatchRequired设置为true,例如

combobox1.MatchEntry=1
combobox1.MatchRequired=True

[]的