Activar / Desactivar Botón en Excel con condición

Estoy trabajando con un Botón dentro de la "Hoja1" que al oprimirse ejecuta una macro y que sólo deberá estar activado cuando el contenido de una celda concreta (B2:C2) no esté en blanco o con valor 0.

¿Cómo puedo hacerlo?

1 respuesta

Respuesta
1

Que un botón se vea o no según valor de celda no se me ocurre cómo, salvo al evento Activate de la hoja,,,,, pero una vez que estés allí podrías usar el evento Change de la hoja y controlar si se borra la celda o se coloca algún valor...

Pero lo más simple es que agregues una línea a tu macro controlando el valor de la celda y según eso se ejecute o no.

If Range("B2:C2") = "" then Exit sub

PD) Si necesitas ayuda para alguna de las opciones anteriores avisame.

Hola Elsa

Mil gracias por tu respuesta, pero tengo una duda, al adicionar la linea a la macro, me genera un error de compilación: End If, Sin Bloque If. No se que estoy haciendo mal.

Gracias...

Si solo colocaste la línea que te indiqué tal como la dejé allí no hay error.

If Range("B2:C2") = "" then Exit sub

Si hiciste un salto de renglón para colocar el Exit sub hay que agregar el end if

If Range("B2:C2") = "" then

Exit sub

End If

Si aún así aparece un error se debe a el resto de tu código.

Sdos, comentame qué pasó.

Elsa, estoy por darme por vencida... he intentado de varias formas y no me funciona.

estoy segura que algo hago mal, pero no doy que es... :(

Este es el código que tengo:

Sub Macro17()
'
' Macro17 Macro
'
'

Range("A2:F12").Select
Selection.Copy
Sheets("Consolidado").Select
Selection.Insert Shift:=xlDown
Columns("A:F").Select
Application.CutCopyMode = False
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Cells.Select
Application.CutCopyMode = False
Selection.AutoFilter
Selection.AutoFilter
Range("F4").Select
ActiveSheet.Range("$A$1:$AD$394").AutoFilter Field:=6, Criteria1:="="
Rows("3:3").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Delete Shift:=xlUp
Columns("G:G").Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Delete Shift:=xlToLeft
ActiveSheet.Range("$A$1:$F$3").AutoFilter Field:=6
ActiveWindow.ScrollColumn = 1
Range("A2").Select
Sheets("Ventas").Select
Range("B2:C11").Select
Selection.ClearContents
Range("F13").Select
Selection.ClearContents
Range("A13").Select
ActiveCell.FormulaR1C1 = "=+R[-2]C+1"
Range("A13").Select
Selection.Copy
Range("A2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.AutoFill Destination:=Range("A2:A11"), Type:=xlFillDefault
Range("A2:A11").Select
Range("A13").Select
Selection.ClearContents
Range("B2").Select
End Sub

He colocado la linea al comienzo, tal como tu la das, pero sale un error, he intentado de las dos formas y es igual y la verdad no soy muy habil con el tema de las macros... :(

Por tu valiosa colaboración, de antemano gracias!!!

Probala con esta línea al incio:

If Range("B2") = 0 Then Exit Sub

Es válida aunque las celdas estén combinadas. Si hay que comparar 2 celdas: B2 y C2 entonces vá esta:

If Range("B2") = 0 and range("C2") = 0 Then Exit Sub

Sdos

Elsa

Mil Gracias Elsa!!!

Muy valiosa tu colaboración y agradezco tu paciencia....

Ya había visto algunas de tus soluciones y me alegro poder contar con tigo como experto en este caso.

Gracias !!!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas