如何让excel 单元格内容改变过程中触发事件。
我想用vba做一个单元格输入内容时,立马可以出现列表框,提示信息(来自数据库)。选择即可。像百度搜索栏那样的功能。用了PrivateSubWorkbook_SheetCh...
我想用vba做一个单元格输入内容时,立马可以出现列表框,提示信息(来自数据库)。选择即可。像百度搜索栏那样的功能。用了Private Sub Workbook_SheetChange 和Private Sub Workbook_SheetSelectionChange 都没用。他们不能实现即时触发。期待高手解决。
还是没解决问题啊。。。我要的是方法。 展开
还是没解决问题啊。。。我要的是方法。 展开
3个回答
展开全部
http://club.excelhome.net/thread-561331-1-1.html
Option Explicit
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
ActiveCell.Value = Left(ListBox1.Value, InStr(ListBox1.Value, "■") - 1)
ActiveSheet.Range("b" & ActiveCell.Row).Value = Mid(ListBox1.Value, WorksheetFunction.Find("■", ListBox1.Value) + 1, WorksheetFunction.Find("◆", ListBox1.Value) - WorksheetFunction.Find("■", ListBox1.Value) - 1)
ActiveSheet.Range("c" & ActiveCell.Row).Value = Mid(ListBox1.Value, InStr(ListBox1.Value, "◆") + 1, Len(ListBox1.Value) - InStr(ListBox1.Value, "◆"))
Me.ListBox1.Clear
Me.TextBox1 = ""
Me.ListBox1.Visible = False
Me.TextBox1.Visible = False
End Sub
Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim i As Integer
Dim Language As Boolean, arr1 As Variant, arr2 As Variant, arr3 As Variant, arr4 As Variant
Dim myStr As String, str_B As String
Me.ListBox1.Clear
With Me.TextBox1
For i = 1 To Len(.Value)
If Asc(Mid$(.Value, i, 1)) > 255 Or Asc(Mid$(.Value, i, 1)) < 0 Then
Language = True
myStr = myStr & Mid$(.Value, i, 1)
Else
myStr = myStr & LCase(Mid$(.Value, i, 1))
End If
Next
End With
With Sheet2
If Language = True Then
arr1 = .Range("b2:b" & .Range("b65535").End(xlUp).Row)
arr2 = .Range("a2:a" & .Range("b65535").End(xlUp).Row)
arr3 = .Range("c2:c" & .Range("b65535").End(xlUp).Row)
arr4 = .Range("d2:d" & .Range("b65535").End(xlUp).Row)
For i = 1 To .Range("b65535").End(xlUp).Row - 1
If InStr(arr1(i, 1), myStr) Then
Me.ListBox1.AddItem arr1(i, 1) & "■" & arr3(i, 1) & "◆" & arr4(i, 1)
End If
Next i
Else
arr1 = .Range("a2:a" & .Range("b65535").End(xlUp).Row)
arr2 = .Range("b2:b" & .Range("b65535").End(xlUp).Row)
arr3 = .Range("c2:c" & .Range("b65535").End(xlUp).Row)
arr4 = .Range("d2:d" & .Range("b65535").End(xlUp).Row)
For i = 1 To .Range("b65535").End(xlUp).Row - 1
If InStr(arr1(i, 1), myStr) Then
Me.ListBox1.AddItem arr2(i, 1) & "■" & arr3(i, 1) & "◆" & arr4(i, 1)
End If
Next i
End If
End With
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i As Integer
If Target.Count = 1 Then
If Target.Column = 1 And Target.Row > 1 Then
With Me.TextBox1
.Visible = True
.Top = Target.Top
.Left = Target.Left
.Width = Target.Width
.Height = Target.Height
End With
With Me.ListBox1
.Visible = True
.Top = Target.Top
.Left = Target.Left + Target.Width
.Width = Target.Width * 1.5
.Height = Target.Height * 5
End With
Else
Me.ListBox1.Clear
Me.TextBox1 = ""
Me.ListBox1.Visible = False
Me.TextBox1.Visible = False
End If
End If
End Sub
展开全部
在【数据】,【有效性】的【设置】里选序列,可解决。
具体操作方法:
1.选中要输入数据的单元格;然后选【数据】;
2.选【有效性】,选【设置】;
3.在【有效性条件】下的【允许】框,选择“序列”;
4.在【有效性条件】下的【来源】框内输入你所要选择输入的内容,中间用英文逗号隔开;然后确定即可。
5.例如:在【来源】下框内输入“男,女”,则你所要输入的单元格会出现一个下拉三角形,点下拉按钮会出现“男”和“女”供选择输入。
具体操作方法:
1.选中要输入数据的单元格;然后选【数据】;
2.选【有效性】,选【设置】;
3.在【有效性条件】下的【允许】框,选择“序列”;
4.在【有效性条件】下的【来源】框内输入你所要选择输入的内容,中间用英文逗号隔开;然后确定即可。
5.例如:在【来源】下框内输入“男,女”,则你所要输入的单元格会出现一个下拉三角形,点下拉按钮会出现“男”和“女”供选择输入。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼主所说的要求实际是EXCEL中输入时逐步提示信息的方法。
用户在录入数据时,比如在工作表中输入产品名称,除了希望有所有产品名称的下拉列表供选择外,更希望能逐步给出提示信息。比如在输入一两个字符后把符合条件的数据筛选出来供选择,最好是中英文、拼音首字母、大小写能混合查询,这将大大提高录入速度和正确率。
如果要设置这样的功能,要涉及到众多事件。如工作表Change事件和SelectionChange事件、控件文本框KeyUp和KeyDown事件、控件列表框GotFocus事件、KeyDown事件和DblClick事件及自定义函数。
用户在录入数据时,比如在工作表中输入产品名称,除了希望有所有产品名称的下拉列表供选择外,更希望能逐步给出提示信息。比如在输入一两个字符后把符合条件的数据筛选出来供选择,最好是中英文、拼音首字母、大小写能混合查询,这将大大提高录入速度和正确率。
如果要设置这样的功能,要涉及到众多事件。如工作表Change事件和SelectionChange事件、控件文本框KeyUp和KeyDown事件、控件列表框GotFocus事件、KeyDown事件和DblClick事件及自定义函数。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询