|
楼主 |
发表于 2020-1-17 21:56
|
显示全部楼层
感谢你的回答,我明白你的意思了,用一个listbox解决问题,我还有几个疑问:
1、请教一下你的修改的代码含义,原来是.Top = Target.Top + Target.Height 'listbox的顶端位置,你将Target.Top 修改为Target(2).Top 有什么含义呢,我试着去掉“(2)”,却也不影响代码执行。
2、请解释一下 strMy2 = .List(i, 1)和ActiveCell(1, 2) = strMy2代码的意思,这个我不太理解所以我改不了。
因为D、E列的效果还差一点点,没有达到我的意图。
我想达到的效果是D列是大类,如果是多选情况下不要显示重复项,E列是明细,勾选了哪些就要全部显示,我做了一个效果图(图片种右小角)如下。请指教。(能添加顿号最好)
另,我把你的代码合在一起了,还请用现在的代码基础上修改。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Columns.Count > 1 Or Target.Rows.Count > 1 Then Exit Sub
If Target.Column = 3 Then
If Target.Offset(0, -1) = Target.Offset(-1, -1) And Target.Offset(0, -1) <> "" And Target = "" Then
Target.Value = Target.Offset(-1, 0)
Else: Target.Value = Target.Offset(-1, 0) + 1
End If
End If
If Target.Column < 3 Then
If Target.Offset(-1, 0).Value <> "" And Target.Value = "" Then
Target.Value = Target.Offset(-1, 0) + 1
End If
End If
If Target.Column <> 4 Or Target.Row < 3 Then ListBox1.Visible = False: Exit Sub
'如果选中的单元格不是第3列,或者小于4行,也就是不在目标范围内,则退出程序
If Target.Columns.Count > 1 Or Target.Rows.Count > 1 Then ListBox1.Visible = False: Exit Sub
'如果选中的单元格大于1个,则退出程序
With Sheets("源数据")
r = .Range("A2:C" & .Cells(Rows.Count, "a").End(xlUp).Row).Value
End With
With ListBox1
'调整位置到单元格处
.Top = Target.Top + Target.Height 'listbox的顶端位置,去掉(2),不影响显示呢?
.Left = Target.Left + Target.Width 'listbox的左端位置
.Width = 150 '宽度
.Height = 200 '高度
.Visible = True '可见
.ColumnHeads = False '不显示标题行
.ColumnCount = 2 '二列
.ColumnWidths = "50;100" '设置第一列宽度50第二列宽度100……
.List = r '数据来源
.MultiSelect = fmMultiSelectMulti '允许通过鼠标点击的方式进行多选
.ListStyle = fmListStyleOption '选项按钮设置为方形
End With
End Sub
Private Sub ListBox1_Change()
Dim i As Long, strMy As String
With ListBox1
If .Selected(0) = True Then .Selected(0) = False
'如果用户选取的是标题行那么撤销选取
For i = 1 To .ListCount - 1
'遍历listbox的记录,如果被选中则按换行符合并
If .Selected(i) = True Then
strMy = strMy & vbCrLf & .List(i, 0)
strMy2 = .List(i, 1)
'取list的第二列
'无论列还是行的索引都是从0开始的,因此第二列为1
End If
Next
End With
ActiveCell.Value = Mid(strMy, 3)
ActiveCell(1, 2) = strMy2
'数据写入单元格
End Sub
|
|