首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

选择一个少一个,这样的下拉菜单才够拽

一般的下拉菜单,无论什么时候,下拉选项都是一样的,这样不仅不便于选择,而且一不留神就容易重复录入数据。

如果能选择一个,下拉菜单中就少一个,这样岂不是方便的很嘛。咱们来看看效果:

接下来就看看具体的实现步骤:

首先在Sheet2工作表中输入候选的人员名单:

按Alt+F11组合键,调出VBE操作界面,单击左侧工程窗口的工作表名称Sheet1,在右侧的代码窗口中输入代码。

以下是完整的代码和注释,只要把这些内容全部复制,粘贴到代码窗口中,就可以使用了:

Private Sub ComboBox1_Change() '组合框的值发生改变时

Selection = ComboBox1.Value'当组合框的值发生改变时,

'就将组合框的值赋给选择的单元格(选择区域)

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim hang% '整型,用于接收最后的行号

Dim arr() '定义数组

Dim k'变体型

Dim aa '变体型

On Error Resume Next'发生错误时继续运行,【必须】

If Target.Row= 2Then '【Target为选择的单元格】,

'当选择单元格的行号为2时条件成立

'以下让组合框的长宽、顶部底部等于选择单元格,实现随单元格移动

With ComboBox1

.Top = Target.Top

.Left = Target.Left

.Width = Target.Width

.Height = Target.Height

.Visible = True

End With

'返回sheet2表中A列最后一行的行号

hang = Sheet2.Cells(Rows.Count, 1).End(xlUp).Row

arr = Sheet2.Range("A1:A" & hang) '指定区域的人名 赋值数组arr

arr = WorksheetFunction.Transpose(arr) '调用工作表函数,二维数组转一维

ComboBox1.Clear'先清除组合框的所有数据【重要】,否则会累计增加数据

'以下for each 循环

For Each aa In arr

k = Sheet1.Range("A2:H2").Find(aa) '在指定区域查找循环除的人名

If k = "" Then

ComboBox1.AddItem aa'只有当k为空时,则添加一个名字到组合框

End If

Next

Else

ComboBox1.Visible = False'当选择单元格的行不为2时,隐藏组合框

End If

End Sub

粘贴完成后关闭VBE界面,就可以使用动态的下拉菜单了。

小伙伴们在使用时,可以根据需要更改代码中红色部分的条件和范围范围,你也试试。

注意注意:文件保存的时候需选择 excel 启用宏的工作簿(*.xlsm),不然代码会丢失的!

图文制作:赵中山

专业的职场技能充电站

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191018A039PS00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券