请帮分析一下下面VBA代码的意思??求高人,最好是每条解答。

发布网友 发布时间: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区域查找当前输入字符开头的内容,将所有内容添加到列表框控件内。。(中间有数组做为转接,没有去重复)

在列表框内选择内容,鼠标单击时。触发列表框单击事件(个人感觉不太好,换成双击事件),把该内容添加到之前的活动单元格。控件隐藏。。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com