|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
'楼主的代码还是比较烂的。我只改了以下3个过程,仅供参考。
'特别是TextBox1_Change,这个过程是很重要的,但是楼主代码有一个重大缺陷,
'就是勾选之后不能再次查询,再次查询将会清空原选中的数据。无法实现真正的多选。
'ListView除了第一列,其他列都是无法编辑的,我虽保留了“数量”这列,但是没有意义的。
'把价格表存放在数组中会提高程序效率。像楼主代码那样频繁读取对象,不是最优的。
'
'Public arr
Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
With ListView1
.Sorted = True
.SortKey = ColumnHeader.Index - 1
.SortOrder = IIf(.SortOrder, 0, 1)
End With
End Sub
Private Sub UserForm_Initialize()
With ListView1
.ColumnHeaders.Add , , "品名", Width / 2
.ColumnHeaders.Add , , "单位", Width / 6.8, lvwColumnCenter
.ColumnHeaders.Add , , "单价", Width / 6.8, lvwColumnCenter
.ColumnHeaders.Add , , "数量", Width / 6.8, lvwColumnCenter
.View = lvwReport
.Gridlines = True
.FullRowSelect = True
.MultiSelect = True
.CheckBoxes = True
End With
Label2.Caption = ""
TextBox1.SetFocus
arr = Sheet1.UsedRange
End Sub
Private Sub TextBox1_Change()
For t = ListView1.ListItems.Count To 1 Step -1
If Not ListView1.ListItems(t).Checked Then ListView1.ListItems.Remove t
Next
For i = 1 To UBound(arr)
If arr(i, 1) Like "*" & UCase(TextBox1.Text) & "*" _
Or arr(i, 2) Like "*" & UCase(TextBox1.Text) & "*" Or arr(i, 3) Like "*" & UCase(TextBox1.Text) & "*" Then
Set itm = ListView1.ListItems.Add()
itm.Text = arr(i, 1)
itm.SubItems(1) = arr(i, 2)
itm.SubItems(2) = Format(arr(i, 3), "0.00")
itm.SubItems(3) = ""
End If
Next
Label2.Caption = "共找到 " & ListView1.ListItems.Count & " 条记录"
End Sub
|
|