|
![](https://clubstatic.excelhome.net/image/common/ico_lz.png)
楼主 |
发表于 2023-12-4 11:10
|
显示全部楼层
Dim currRow '定义一个变量currRow,用于存储当前选中的行号
Private Sub Worksheet_SelectionChange(ByVal Target As Range) '当工作表中的选区发生改变时,执行此子程序
Dim ws As Worksheet, lastRow As Long '定义工作表类型变量ws和长整型变量lastRow
Dim xm As String '定义字符串变量xm
Dim arr() As Variant '定义数组arr
Dim m As Long, i As Long, j As Long, k As Long
Set ws = ThisWorkbook.Sheets("客户BOM明细") '将工作簿中的"客户BOM明细"工作表赋值给ws
'判断条件,如果选中的行号大于1且选中的是第16列,则执行下面的代码
If Target.Row > 1 And Target.Column = 16 Then
'将当前行号赋值给currRow
currRow = Target.Row
'获取当前行P列的值并赋值给xm
xm = Me.Cells(currRow, "P").Value
'设定ListBox1控件的位置和列数
With Me.ListBox1
.Clear '清空ListBox1的内容
.Visible = True '使ListBox1可见
.Top = Target.Top + Target.Height '设置上边界为选中单元格的顶部边界加上选中单元格的高度
.Left = Target.Left + 55 '设置左边界为选中单元格的左边界加上55(可能是预设的偏移量)
.ColumnCount = 9 '设置ListBox1的列数为9
'为ListBox1的每一列设置宽度,此处以工作表"销售明细"第一行的每一列宽度为例进行设置
For j = 1 To 9
w = w & ws.Cells(1, j).Width & ";"
Next
w = Left(w, Len(w) - 1) '去掉最后一个分号和空格
.ColumnWidths = w '设置列宽度
End With
'将"客户BOM明细"工作表的整个使用范围赋值给数组arr,并添加到ListBox1的第一项中
arr = ws.UsedRange
ListBox1.AddItem
For m = 1 To 9 '将arr数组的每一列添加到ListBox1中
ListBox1.List(0, m - 1) = arr(1, m)
Next
k = 0 '初始化k为0
'遍历arr数组,如果arr数组的某一行的第一列的值等于xm,则在ListBox1中添加一项,并将这一行的数据添加到新的项中
For i = 2 To UBound(arr)
If arr(i, 1) = xm Then
ListBox1.AddItem
For j = 1 To 9
ListBox1.List(k + 1, j - 1) = arr(i, j)
Next
k = k + 1 'k自增,用于下一项的添加
End If
Next
'根据ListBox1中的项数调整其高度,每一项的高度可能是固定的,这里设定为10
With ListBox1
.Height = 40 + (.ListCount - 1) * 10
End With
Else
'如果未选中第16列,则将ListBox1设为不可见
Me.ListBox1.Visible = False
End If
End Sub '结束子程序
我把代码 改成上述样子 提示 方法和数据成员未找到 怎么修改 |
|