在一个系统刚上线时,需要把以前的数据导入系统,方便使用与管理,程序不是万能的,导入表格要符合系统要求的规则才能顺利地导入。在整理庞大而又繁琐的数据时,为了减少系统报错的概率,可以事先对excel的表格格式做处理。文章里要说的是一个不常用到的一个小技巧-----下拉框多选。我问了百度,找到了一些方法,把最简单最快捷的方法给出来,像我一样不懂宏不懂代码的小伙伴可以看下。
首先在某列利用数据有效性-建立下拉菜单表。数据-->数据有效性-->数据有效性,“允许”选择“序列”,然后把需要选择的内容输入到来源里,中间用英文逗号“,”隔开。下拉框单选便成了。
设置单选的下拉框 单选下拉框然后在下拉表所打开的sheet中(如sheet1),鼠标右击下面的工作表,选择“查看代码”,就可打开VBA编辑界面。复制下方的代码,并将其中一行的 If Target.Column = 7 Then 中的7修改为下拉数据表所在的列数,搞定。第几列便是数字几,A是1,B是2,以此类推。
7这个数字代表第几列表格中两个选项间用中文逗号、英文逗号、顿号、横杠等等符号隔开,把下面两句代码中双引号间的符号改为想要的符号即可,注意二者要保持一致。
选项间的间隔符号代码:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngDV As Range
Dim oldVal As String
Dim newVal As String
If Target.Count > 1 Then GoTo exitHandler
On Error Resume Next
Set rngDV = Cells.SpecialCells(xlCellTypeAllValidation)
On Error GoTo exitHandler
If rngDV Is Nothing Then GoTo exitHandler
If Intersect(Target, rngDV) Is Nothing Then
'do nothing
Else
Application.EnableEvents = False
newVal = Target.Value
Application.Undo
oldVal = Target.Value
Target.Value = newVal
If Target.Column = 7 Then
If oldVal = "" Then
'do nothing
Else
If newVal = "" Then
'do nothing
Else
If InStr(1, oldVal, newVal) <> 0 Then
If InStr(1, oldVal, newVal) + Len(newVal) - 1 = Len(oldVal) Then
Target.Value = Left(oldVal, Len(oldVal) - Len(newVal) - 1)
Else
Target.Value = Replace(oldVal, newVal & ",", "")
End If
Else
Target.Value = oldVal & "," & newVal
' NOTE: you can use a line break,
' instead of a comma
' Target.Value = oldVal _
' & Chr(10) & newVal
End If
End If
End If
End If
End If
exitHandler:
Application.EnableEvents = True
End Sub
代码来源:知乎
链接:https://www.zhihu.com/question/20484204/answer/142569580
说明:代码中 ' 后面的内容为说明文字,可以删除,不影响代码的执行,放在excel里会变为绿色,这些只是说明。当然也可以加 ' ,然后加入自己要说明的东西。
“ ‘ ” 后面的内容为说明,可删除额外说明:
excel保存时会提示宏无法保存,这个问题目前还没研究出来,庆幸本次的设计只是给自己公司内部人用的,所以只能复制代码给他们,让他们自己复制一遍了。
如果哪位大神有解决办法,望赐教~~
网友评论