Ejecutar una macro sin importar donde este el cursor, no ejecute si falta un dato

Recurro a su valiosa ayuda, dos cosas:

La primera, tengo una macro que para poder ejecutarla y funcione necesariamente tengo que ubicarme en la celda "H64", de lo contrario me sale error, quisiera que se pudiera ejecutar no importa donde este el cursor.

La segunda, es que tampoco me permita ejecutar si dejo un campo vacío en la celda "C62", que me salga un msgbox indicando que debo completar ese campo.

Adjunto mi código VBA para que me puedan dar una ayuda.

$$\begin{align}&Sub Resultados()\\&' Realizado por Juan Arenas\\&'\\&' Macro1 Macro\\&'\\&' Aporte de James Bond de contador de macro\\&\\&Range("l7") = Range("l7") + 1\\&MsgBox (Range("l7") & " veces ejecutada")\\&\\&    Application.ScreenUpdating = False\\&    Sheets("R-HSE-EMCS").Select\\&    ActiveSheet.Unprotect Password:="1234"\\&        \\&    ActiveCell.FormulaR1C1 = "=RC[4]/RC[5]"\\&    Range("H24").Select\\&    ActiveCell.FormulaR1C1 = "=RC[4]/RC[5]"\\&    Range("H36").Select\\&    ActiveCell.FormulaR1C1 = "=RC[4]/RC[5]"\\&    Range("H41").Select\\&    ActiveCell.FormulaR1C1 = "=RC[4]/RC[5]"\\&    Range("H48").Select\\&    ActiveCell.FormulaR1C1 = "=RC[4]/RC[5]"\\&    Range("H52").Select\\&    ActiveCell.FormulaR1C1 = "=RC[4]/RC[5]"\\&    Range("H64").Select\\&    ActiveCell.FormulaR1C1 = "=RC[4]/RC[5]"\\&    \\&    Sheets("R-HSE-EMCS").Select\\&    ActiveSheet.Protect Password:="1234"\\&    Application.ScreenUpdating = True\\&    \\&    Application.ScreenUpdating = False\\&    Sheets("RESUMEN").Select\\&    ActiveSheet.Unprotect Password:="1234"\\&    \\&    Sheets("RESUMEN").Select\\&    \\&    Sheets("RESUMEN").Select\\&    ActiveSheet.Protect Password:="1234"\\&    Application.ScreenUpdating = True\\&           \\&    \\&\end Sub\\&\end{align}$$
Sub Resultados()
' Realizado por Juan Arenas
'
' Macro1 Macro
'
' Aporte de James Bond de contador de macro
Range("l7") = Range("l7") + 1
MsgBox (Range("l7") & " veces ejecutada")
    Application.ScreenUpdating = False
    Sheets("R-HSE-EMCS").Select
    ActiveSheet.Unprotect Password:="1234"
    ActiveCell.FormulaR1C1 = "=RC[4]/RC[5]"
    Range("H24").Select
    ActiveCell.FormulaR1C1 = "=RC[4]/RC[5]"
    Range("H36").Select
    ActiveCell.FormulaR1C1 = "=RC[4]/RC[5]"
    Range("H41").Select
    ActiveCell.FormulaR1C1 = "=RC[4]/RC[5]"
    Range("H48").Select
    ActiveCell.FormulaR1C1 = "=RC[4]/RC[5]"
    Range("H52").Select
    ActiveCell.FormulaR1C1 = "=RC[4]/RC[5]"
    Range("H64").Select
    ActiveCell.FormulaR1C1 = "=RC[4]/RC[5]"
    Sheets("R-HSE-EMCS").Select
    ActiveSheet.Protect Password:="1234"
    Application.ScreenUpdating = True
    Application.ScreenUpdating = False
    Sheets("RESUMEN").Select
    ActiveSheet.Unprotect Password:="1234"
    Sheets("RESUMEN").Select
    Sheets("RESUMEN").Select
    ActiveSheet.Protect Password:="1234"
    Application.ScreenUpdating = True
End Sub

Este mi archivo

2 Respuestas

Respuesta
2

Te anexo la macro actualizada.

Puedes poner la celda donde quieres poner el resultado, sin necesidad de seleccionar la celda, por ejemplo, en lugar de esto:

    Range("H24").Select
    ActiveCell.FormulaR1C1 = "=RC[4]/RC[5]"

Puedes ponerlo así:

        Range("H24").FormulaR1C1 = "=RC[4]/RC[5]"

Revisa la macro con los cambios y me comentas.

También falta que pongas en cuál hoja va el contador, yo puse la hoja "RESUMEN", pero no sé si va en la otra hoja.

Sub Resultados()
    ' Realizado por Juan Arenas
    '
    ' Macro1 Macro
    '
    'tienes que poner la hoja donde inicia la macro
    Sheets("RESUMEN").Select
    ActiveSheet.Unprotect Password:="1234"
    Range("l7") = Range("l7") + 1
    MsgBox (Range("l7") & " veces ejecutada")
    '
    Application.ScreenUpdating = False
    Sheets("R-HSE-EMCS").Select
    If Range("C62").Value = "" Then
        MsgBox "Falta completar el campo"
        Range("C62").Select
    Else
        ActiveSheet.Unprotect Password:="1234"
        Range("H24").FormulaR1C1 = "=RC[4]/RC[5]"
        Range("H24").FormulaR1C1 = "=RC[4]/RC[5]"
        Range("H36").FormulaR1C1 = "=RC[4]/RC[5]"
        Range("H41").FormulaR1C1 = "=RC[4]/RC[5]"
        Range("H48").FormulaR1C1 = "=RC[4]/RC[5]"
        Range("H52").FormulaR1C1 = "=RC[4]/RC[5]"
        Range("H64").FormulaR1C1 = "=RC[4]/RC[5]"
        ActiveSheet.Protect Password:="1234"
    End If
    Sheets("RESUMEN").Select
    ActiveSheet.Protect Password:="1234"
    Application.ScreenUpdating = True
End Sub


Avísame cualquier detalle. Sal u dos

Amigo Dante, también quiero que la celda F62 .

Como adecuaría esta fórmula.

Porque corre excelente, solo que quiero una restricción en la celda F62 que tampoco ejecute mientras no se llene también ese campo. Es decir, la condición seria C62 y F62

If Range("C62").Value = "" Then
        MsgBox "Falta completar el campo"
        Range("C62").Select

Cambia esta línea

If Range("C62").Value = "" Then

Por esta:

If Range("C62").Value = "" or range("F62").value = "" Then 
Respuesta
1

Eso ocurre porque has utilizado referencias relativas para grabar tu código.

Si has grabado un macro utilizando el grabador, debes asegurarte que la opción de "usar referencias relativas" no está activada. (Cuando está activado se sombrea en verde)

Si una vez que lo has hecho así, ya te funciona, puedes editar el macro (modificar macro) e insertar en la primeras líneas de la macro este código:

if cells(62,"C")="" then

msgbox "Necesita poner el nombre del evaluador"

cells(62,"C").select

exit sub

end if

Estimado:

La el código que me diste funciona muy bien casi al 98% ayúdame con algo. Es decir, mientras me ubique en una celda vacía la macro ejecuta, pero por ejemplo si el cursor lo ubico en un campo donde tengo ubicada una fórmula condicional, me sale una flecha azul de rastrear dependientes.

Como podría ser para solucionar este error, lo que pasa es que lo hice con grabadora de macro.

Adjunto la foto.

Puedes evitar eso si insertas un botón para ejecutar la macro en lugar de hacerlo con <Ctrl + letra>

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas