|
Rem VBA知识点:窗体与表格的交互
Private Sub UserForm_Activate()
TextBox1.SetFocus '激活窗体时默认进入文字框,且指定窗体显示在活动单元格右方
Me.Left = ActiveCell.Offset(0, 1).Left + 30
End Sub
'在文字框中按下键盘时触发事件
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
On Error Resume Next '防错,避免活动单元格在第一行且Offset向上偏移时出错
If KeyCode = 27 Then Unload Me '如果按下Esc键则关闭窗体
'在文字框中空的状态下按下箭头和上箭都作用于单元格,相应地移动激动单元格。如果文字框中有字符则直接移向列表框这不需要设置,是默认的功能
If Len(TextBox1) = 0 Then
If KeyCode = vbKeyDown Then ActiveCell.Offset(1, 0).Activate
If KeyCode = vbKeyUp Then ActiveCell.Offset(-1, 0).Activate
End If
End Sub
'在文字框中键弹起的瞬间触发事件,即打字时文字显示在文字框中时
Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If Len(TextBox1.Text) > 0 Then '如果已输入字符
ListBox1.Clear '清除原有列表
'利用循环查对比输入的字符与词条工作表中A列的词条,相似则加入列表框
For i = 1 To Sheets("词条").Cells(Rows.Count, 1).End(xlUp).Row
If Sheets("词条").Cells(i, 1) Like TextBox1.Text & "*" Then
ListBox1.AddItem Sheets("词条").Cells(i, 1)
End If
Next i
Else
ListBox1.Clear '否则清除列表框(指在文字框中按下删除键时)
End If
DoEvents '移交控件权,使用后面的两句代码可以正常执行
ListBox1.Height = 9 * ListBox1.ListCount + 10 '其中9表示字体大小,以字体乘以行数则表示列表框刚好适应项目的多少,但加10会更美观
Me.Height = 9 * ListBox1.ListCount + 75 '窗体随列表框的高度而变化
End Sub
'当文字框接受焦点时触发事件,按下TAB键时,焦点从列表框转向文字框时
Private Sub TextBox1_Enter()
On Error Resume Next
If Len(TextBox1) > 0 Then '如果文字框有文字
ActiveCell = TextBox1.Text '将文字框的值输出到单元格
ActiveCell.Offset(1, 0).Activate '激活下一单元格
TextBox1 = "" '清空列表框与文字框
ListBox1.Clear
End If
End Sub
Private Sub ListBox1_Click()
Me.TextBox1 = Me.ListBox1.Value
End Sub |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
评分
-
查看全部评分
|