如何让excel 单元格内容改变过程中触发事件。

我想用vba做一个单元格输入内容时,立马可以出现列表框,提示信息(来自数据库)。选择即可。像百度搜索栏那样的功能。用了PrivateSubWorkbook_SheetCh... 我想用vba做一个单元格输入内容时,立马可以出现列表框,提示信息(来自数据库)。选择即可。像百度搜索栏那样的功能。用了Private Sub Workbook_SheetChange 和Private Sub Workbook_SheetSelectionChange 都没用。他们不能实现即时触发。期待高手解决。

还是没解决问题啊。。。我要的是方法。
展开
 我来答
共享吧01
2015-12-23 · TA获得超过355个赞
知道小有建树答主
回答量:655
采纳率:0%
帮助的人:122万
展开全部

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
laiqw125
2010-11-18 · TA获得超过1234个赞
知道小有建树答主
回答量:310
采纳率:0%
帮助的人:305万
展开全部
在【数据】,【有效性】的【设置】里选序列,可解决。

具体操作方法:
1.选中要输入数据的单元格;然后选【数据】;
2.选【有效性】,选【设置】;
3.在【有效性条件】下的【允许】框,选择“序列”;
4.在【有效性条件】下的【来源】框内输入你所要选择输入的内容,中间用英文逗号隔开;然后确定即可。
5.例如:在【来源】下框内输入“男,女”,则你所要输入的单元格会出现一个下拉三角形,点下拉按钮会出现“男”和“女”供选择输入。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cm6705
推荐于2016-02-16 · TA获得超过328个赞
知道小有建树答主
回答量:289
采纳率:0%
帮助的人:398万
展开全部
楼主所说的要求实际是EXCEL中输入时逐步提示信息的方法。
用户在录入数据时,比如在工作表中输入产品名称,除了希望有所有产品名称的下拉列表供选择外,更希望能逐步给出提示信息。比如在输入一两个字符后把符合条件的数据筛选出来供选择,最好是中英文、拼音首字母、大小写能混合查询,这将大大提高录入速度和正确率。
如果要设置这样的功能,要涉及到众多事件。如工作表Change事件和SelectionChange事件、控件文本框KeyUp和KeyDown事件、控件列表框GotFocus事件、KeyDown事件和DblClick事件及自定义函数。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式