Macro que al ejecutar con un Botón busque el dato registrado en una celda, en una tabla de datos y ejecute macro correspondiente

Tengo una hoja llamada "INGRESO" y otra hoja llamada "Constantes". En la hoja "INGRESO" registro un dato en la celda "D21". Quiero una macro que se ejecute con un botón que al ejecutarla busque el dato de la celda "D21" de la hoja "INGRESO" en la hoja "Constantes" en la columna "A" desde la fila 1 en adelante.

Ejemplo hoja "INGRESO"

Ejemplo hoja "Constantes"

Resulta que en la hoja "Constantes" hay una tabla de datos desde la fila 1 y en las columnas "A" y "B". En la Columna "A" estan los datos y en la columna "B" esta el nombre de una macro que se debe ejecutar para ese dato particular.

Entonces la idea es que la macro que se ejecute con un boton en la hoja "INGRESO" busque el dato que esta en la celda "D21" en la tabla de la hoja "Constantes" y verifique que macro le corresponde a ese dato y ejecute entonces esa macro.

1 Respuesta

Respuesta
1

Te anexo el código

Sub EjecutarMacro()
'Por.Dante Amor
    Set h1 = Sheets("constantes")
    If [D21] = "" Then Exit Sub
    Set b = h1.Columns("A").Find([D21], lookat:=xlWhole)
    If Not b Is Nothing Then
        If b.Offset(0, 1) <> "" Then
            Run b.Offset(0, 1).Value
        End If
    End If
End Sub

S a l u d o s

¡Gracias! 

Dante solo una ultima cosa. Que significa de tu macro el "0, 1" la verdad no conozco mucho de macros por eso pregunto.

Por ejemplo si el nombre de la macro por cosas de la vida lo tuviera que cambiar de columna ya no a "B" sino a por ejemplo "S" que deberia entonces cambiar en la macro? 

En el objeto b tengo la celda del valor encontrado, como sé que la celda está en la columna A, entonces con la instrucción offset, puedo recorrer el objeto un número de filas y un número de columnas.

b.offset(0, 1)

Le estoy diciendo que se recorra 0 filas y una columna, entonces tomará el valor de la misma fila pero de la columna B

Para tomar la columna S, habría que recorrer el número de columnas hasta la S, sería algo como esto

b. Offset(0, 18)

Pero saber cuántas columnas se tiene que recorres es algo complicado, lo más sencillo sería así:

cells(b.row, "B")    = toma el valor de la fila encontrada pero de la columna B

cells(b.row, "S")    = toma el valor de la fila encontrada pero de la columna S.


Regularmente no utilizo offset, por que causa confusión y no es claro en la instrucción, ya que empieza a contar a partir de donde te encuentras, pero sino sabes en dónde te encuentras, menos podrás saber dónde se ubicará la macro.

Así es más claro:

Sub EjecutarMacro()
'Por.Dante Amor
    Set h1 = Sheets("constantes")
    If [D21] = "" Then Exit Sub
    Set b = h1.Columns("A").Find([D21], lookat:=xlWhole)
    If Not b Is Nothing Then
        If Cells(b.Row, "B") <> "" Then
            Run Cells(b.Row, "B").Value
        End If
    End If
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas