发布网友 发布时间:2024-08-18 16:23
共1个回答
热心网友 时间:2024-08-22 16:09
Private Sub ListBox1_Click() ' ListBox1_点击事件
Range(MSTR) = ListBox1.Value '<单元格>区域(MSTR)= ListBox1的值,mstr看你的代码的意思,是你点击的单元格,,但没看到你定义全局变量。
ListBox1.Visible = False ' ListBox1隐藏
TextBox1.Visible = False ' TextBox1隐藏
End Sub '子程序结束
Private Sub TextBox1_Change() 'textbox1的change事件
On Error Resume Next '当错误 转到 下一个
Me.ListBox1.Clear ' 清除listbox1中的值
Dim ARR, ARR1(), k As Integer, sss As String '定义变量 ARR,ARR1()-活动数组,k 为 整型值,sss 为 字符串
ARR = Sheets("数据").Range("F1:F2000") ' ARR=数据sheet中f1:F2000的值(这句应该有问题,可能是f1:g2000)
sss = Me.TextBox1.Text '把文本控件里输入的内容赋值给变量sss
ReDim ARR1(1 To UBound(ARR)) '重定义数组arr1的范围为 1 到数组arr的上标
For X = 1 To UBound(ARR) '设定变量范围为X=1到<数组上限>(ARR)
If Asc(sss) > 0 Then '如果 sss的第一字母转为数值后>0 则执行
If ARR(X, 1) Like UCase(sss) & "*" Then '如果 ARR(X,1) 类似 大写(sss)。加上通配符*进行匹配
k = k + 1 'k=k+1,k为计数器,
ARR1(k) = ARR(X, 2) '数组arr1的第k个值(即目前的最后一个)=arr(x,2)
End If 'If判断过程结束
Else '另外
If ARR(X, 2) Like sss & "*" Then '如果 ARR(X,2) 类似 sss 加上通配符(此段可精简)
k = k + 1 'k=k+1
ARR1(k) = ARR(X, 2) 'ARR1(k)=ARR(X,2)
End If 'If判断过程结束
End If 'If判断过程结束
Next X '下一个X
k = 0 'k=0
Me.ListBox1.List = ARR1 ' listbox中列表项的值=数组arr1
End Sub '子程序结束
Private Sub Worksheet_SelectionChange(ByVal Target As Range) '当工作表选区发生改变时执行本程序,即工作表选择事件
If Target.Column = 1 And Target.Rows.Count = 1 Then '如果 Target的列标=1 并且 Target的行数的计数值=1 则执行 :即点选的单元格在a列,且单元格局域是一列,则
MSTR = Target.Address 'MSTR= Target的地址:该变量在顶部有引用,应定义公共变量
TextBox1.Top = ActiveCell.Top ' TextBox1的顶部= 活动单元格的顶部
ListBox1.Top = TextBox1.Top + TextBox1.Height ' ListBox1的顶部= TextBox1的顶部+ TextBox1的高度:这二句是设定textbox+listbox出现的位置。应该先调用visible=true。再设置控件出现的位置。同时应该设置left。witdh等属性。
ListBox1.Visible = True ' ListdBox1显示
TextBox1.Visible = True ' TextBox1显示
Else '否则
ListBox1.Visible = False ' ListBox1隐藏
TextBox1.Visible = False ' TextBox1隐藏
End If 'If判断过程结束
End Sub '子程序结束
Sub AA() '子程序 AA()
MsgBox Len("A") & " -" & LenB("A") '弹出消息框,显示的内容为 1-2。这里不知道是不是有什么特殊意义!
End Sub '子程序结束
ARR = Sheets("数据").Range("F1:F2000")
这与
ARR(X, 2) 不对应,你确定这代码能运行吗?
总体来说,有点乱,不知道是不是你复制的关系
另:textbox是文本框,listbox是列表框。。
上面这段代码的大意是:
在当前工作表点击a列任意一个单元格(单元格数量小于2),则显示列表框,文本框控件。。文本框的顶部与单元格底部持平。列表框顶部接着文本底部。。
当文本框 改变值时,运行textboxchange事件,(注意,该事件是每输一个字符或删除一个字符就运行一次),在数据表中f1:f2000区域查找当前输入字符开头的内容,将所有内容添加到列表框控件内。。(中间有数组做为转接,没有去重复)
在列表框内选择内容,鼠标单击时。触发列表框单击事件(个人感觉不太好,换成双击事件),把该内容添加到之前的活动单元格。控件隐藏。。