我想实现这样一个功能Q列是出货前原始的数据,出完货之后在R2输入数据,在Q列中查询相同的数据,使之变色并把值附在对应的R列中。

解决方案 »

  1.   


    现在在写宏命令,下午吧,我给你完成的代码+使用说明.
    如果用excel自带的函数处理不了的话我就给你写一个宏.
      

  2.   


    Private Sub Worksheet_Change(ByVal Target As Range)
        
        If Target.Row <> 2 Or Target.Column <> 18 Then Exit Sub '不是R2单元格则退出
        If Len(Target.Value) = 0 Then Exit Sub 'R2单元格空则退出
        
        Dim r
        Set r = Columns("Q:Q").Find(Target.Value)   '在Q列查找
        If r Is Nothing Then
            MsgBox "输错了!"        '没找到
        Else
            Cells(r.Row, r.Column).Interior.ColorIndex = 3    '找到后将背景色设为3(红色),可改变
            Cells(r.Row, r.Column + 1).Interior.ColorIndex = 3
            Cells(r.Row, r.Column + 1) = Cells(r.Row, r.Column)
        End If
        Set r = Nothing: Range("R2").Select
        
    End Sub
      

  3.   


    ++1
    写的很好,但是对楼主来说可能不实用.(对不起lz,那天下午有重要事情要做,所以没来及给你写代码)这次我引用6楼的代码给你写一个实用版的,6楼不要见怪
    lz按照我的操作进行
    首先,在选中R2单元格,点击 "视图(Alt+V)">>"工具栏">>"控件工具栏">>出会先一个浮动的工具栏,点击一下"文本框",然后在R2单元格中画一个跟单元格差不多大的文本框(注意调整大小,能够看到输入的字为号),然后点击右键,"查看代码",会弹出"VB编译器",删除里面的代码将一下代码拷入
    Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 13 Then
        Dim r
        Set r = Columns("Q:Q").Find(TextBox1.Text)   '在Q列查找
        If r Is Nothing Then
            MsgBox "输错了!"        '没找到
        Else
            Cells(r.Row, r.Column).Interior.ColorIndex = 3    '找到后将背景色设为3(红色),可改变
            Cells(r.Row, r.Column + 1).Interior.ColorIndex = 3
            Cells(r.Row, r.Column + 1) = Cells(r.Row, r.Column)
        End If
        'Set r = Nothing: Range("R2").Select
        Set r = Nothing: TextBox1.Text = "": TextBox1.Select
    End If
    End Sub保存,这样你在R2的单元格中输入,然后回车,看看是不是匹配的效果出来了呢.注:为尊重原代码作者,代码修改很少,望见谅!
      

  4.   


    哪里不适用,难道非要多一个控件才实用么?Excel本身的事件就行了,何必要多次一举呢?在R2单元格输入后回车即可查找,为什么要多用一个TextBox呢?不明白。LZ在另一个帖子中提到的输入一个字符不提示错误和保存的问题,下面代码一并解决:Private Sub Worksheet_Change(ByVal Target As Range)
        
        If Target.Row <> 2 Or Target.Column <> 18 Then Exit Sub '不是R2单元格则退出
        If Len(Target.Value) = 0 Then Exit Sub 'R2单元格空则退出
        
        Dim r
        Set r = Columns("Q:Q").Find(What:=Target.Value, LookIn:=xlValues, _
            LookAt:=xlWhole, SearchOrder:=xlByRows)   '在Q列查找
        If r Is Nothing Then
            MsgBox "输错了!"        '没找到
        Else
            Cells(r.Row, r.Column).Interior.ColorIndex = 3    '找到后将背景色设为3(红色),可改变
            Cells(r.Row, r.Column + 1).Interior.ColorIndex = 3
            Cells(r.Row, r.Column + 1) = Cells(r.Row, r.Column)
        End If
        Set r = Nothing: Range("R2").Select
        
        Application.DisplayAlerts = False
        ActiveWorkbook.Save
        Application.DisplayAlerts = TrueEnd Sub
      

  5.   


    也非常感谢你  我之前已经按照z_wenqian 的编写了,  那天没有等到你来 ,  呵呵 !