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

有3个属性,我想为某些VBAformscombobox设置,我不知道是否有可能。 我不想让combobox可编辑。 现在,如果用户在其中input一些东西,它会提交表单,它会发送这个值…我想让他只从我在Combobox中添加的值中select。 我想使combobox中的项目列表可以滚动。 现在我可以滚动列表,如果我使用滚动条,但我不知道为什么我不能滚动鼠标滚动。 如果我开始打字,我想跳到某个项目。 假设我有一个combobox的一年中的几个月…如果我开始键入mar,我希望它跳起来。 我知道,对于HTML表单这个属性是默认的,但我不知道VBA的forms…非常感谢

在你想要的行为中,有些是可以用Combo设置的,其他的你需要编码

  1. 月份列表:将条目列表放在(隐藏)表单上,并命名范围。 将.RowSource设置.RowSource范围
  2. 匹配键入:设置属性.MatchEntry = fmMatchEntryComplete.MatchRequired = True
  3. 拒绝非列表条目:使用这些设置的组合将允许您input无效的条目,但在您提交时会popup错误消息popup框。 如果您想在input时默默拒绝无效数据,则需要对其进行编码。
  4. 如果要将所选值返回到工作表,请将.ControlSource设置为单元格地址(最好是命名范围)
  5. 通过“…滚动鼠标滚动…”我假设你的意思是鼠标滚轮。 Unfortunatley表单不支持鼠标滚轮。 你将不得不自己编码。 在这里有一个微软的补丁(还没有尝试过)

示例代码无声地拒绝无效条目

 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 

将combobox的属性MatchEntry设置为1(fmMatchEntryComplete),并将MatchRequired设置为true

 combobox1.MatchEntry=1 combobox1.MatchRequired=True 

[]的