Celda Activa, presionar enter para disparar Macro

Quiero hacer una macro que al dar ENTER en una celda dispare una macro, en la hoja "AL 1-MAR-08" en la columna A escribo un código, lo que hace la macro es buscar ese código en otra hoja "CATALOGO PROD", al encontrarlo, brinca 1 columna y el valor de esta celda lo pone 4 columnas después del código en la hoja "AL 1-MAR-08", sí funciona la macro pero tengo que activarla yo y quisiera que funcionara al dar ENTER ya sea en el teclado numérico o el otro.
Este es mi código
Option Explicit
Private Sub objeto_Enter()
Dim cod As String
Application.ScreenUpdating = False
Sheets("al 1-mar-08").Select
On Error GoTo noencontro
If Not (ActiveCell.Value) = "" Then
cod = ActiveCell.Value
Sheets("CATALOGO PROD").Select
Cells.Find(What:=cod, lookat:=xlWhole).Select
ActiveCell.Offset(0, 1).Copy
ActiveSheet.Previous.Select
ActiveCell.Offset(0, 4).Select
ActiveSheet.Paste
ActiveCell.Offset(0, -4).Select
End If
Application.ScreenUpdating = True
Exit Sub
noencontro:
End Sub
¿Es posible?

1 respuesta

Respuesta
1
¿Pero la idea es que vas a ingresar un dato en una celda y que se ejecute la macro una vez pulses Enter para salir de esa celda?
Si es así, entonces te recomiendo lo hagas utilizando el evento Change del Worksheet donde está esa celda. De esa forma incluso puedes validar que el valor de la celsa sea válido (valga la redundancia) y funcionaría también si el usuario presiona por ejemplo flecha abajo para salir en lugar de Enter.
Si tienes dudas sobre cómo hacerlo o esa no esa la idea me lo haces saber.
Ups! No se porque se puso dos veces la pregunta, pero bueno, si se activa la Macro al cambiar de Celda pero el resultado no fue como yo esperaba porque cada vez que cambia la celda se dispara la Macro y es bastante incontrolable porque la macro que tengo tiene que cambiar de celda para devolver un valor, esto es mi código
Dim Cod As String
Dim res As String
Application.ScreenUpdating = False
Sheets("AL 1-MAR-08").Select
If (ActiveSheet.Name) = "AL 1-MAR-08" Then
    If Not (ActiveCell.Offset(-1, 0)) = "" Then
        Cod = ActiveCell.Offset(-1, 0).Value
        Sheets("CATALOGO PROD").Select
Cells.Find(What:=Cod, MatchCase:=False).Select
ActiveCell.Offset(0, 1).Copy
Sheets("AL 1-MAR-08").Select
ActiveCell.Offset(-1, 4).Select
ActiveSheet.Paste
ActiveCell.Offset(1, -4).Select
End If
End If
Application.ScreenUpdating = True
No se si se pueda limitar el evento Change a solo la columna "A"
Esa es la idea, que limites el evento para que sólo se corra la macro cuando la celda que cambió fue la que te interesa o la columna, como quieras. Algo así:
If Target.Address = "$A$1" Then
'corre la macro
End If
End Sub
Bueno, tengo una base de datos con varias columnas, en la Col A esta el código, y quiero que en la columna E aparezca el nombre del producto, el catalogo de los productos esta en otra hoja del mismo libro, se que se puede (y así lo tenia) con la fórmula Buscarv pero note que así se hace pesado y lento, y se me ocurrió que seria más rapido y menos pesado si lo hacia con una macro, pero si quisiera que se hiciera automático, que al dar Enter a la celda donde esta el código a buscar, me ponga automáticamente el nombre del producto, mi macro funciona, pero tengo que activarla yo manualmente, le puse un método abreviado. No se si se pueda limitar a un rango de celdas algo así como A1:A1500, o a toda la columna A:A.
Prueba con esto,
Private Sub Worksheet_Change(ByVal Target As Range)
     If Target.Column = 1 Then
            'corre la macro
     End If
End Sub
Así te funcionaría para toda la columna 1.
Ya le puse como me dices pero no funciona, me marca error en el método de la clase Range...
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Target.Column = 2 Then
Dim buscar As String
Dim encontrado As String
Sheets("AL 1-MAR-08").Select
buscar = ActiveCell.Offset(-1, 0).Value
Sheets("CATALOGO PROD").Select
Cells.Find(What:=buscar, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False).Offset(0, 1).Select
encontrado = ActiveCell.Offset(0, 1).Value
Sheets("AL 1-MAR-08").Select
ActiveCell.Offset(-1, 4).Value = encontrado
Application.ScreenUpdating = True
End If
End Sub
Bueno le hice unas modificaciones y ya no es necesario el copy / paste, y si funciona si la activo yo, pero si le pongo el Evento Change ya no funciona por el error que te comento. ¿Alguna idea? No se si sea por lo de Target que es toda la columna pero yo cambio solo 1 celda, ¿se puede hacer que target sea la celda que este activa en la columna A? No se si se pueda, sino pues tendré que activarla manualmente en cada registro, gracias
Creo que te complicas un poco, prueba algo así:
Private Sub Worksheet_Change(ByVal target As Range)
If target.Column = 2 Then
    Cells(target.Row, target.Column + 3).FormulaR1C1 = "=VLOOKUP(RC[-3],'CATALOGO PROD'!C[-4]:C[-3],2,0)"
    Range("E" & LTrim(Str(target.Row))).Value = Range("E" & LTrim(Str(target.Row))).Value
End If
End Sub

Prueba en tu hoja de cálculo, quizás tengas que ajustarlo un poco para que te quede la información donde la deseas.
Funciona, solo tuve que ajustar un poco la ubicación de donde quiero que ponga el nombre, pero lo que no quería era usar la función vlookup, de todos modos gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas