Jump to content
jose_luisc

Formato condicional a una forma

Recommended Posts

Buenas noches foro, les cuento lo que intento hacer para ver si me pueden decir como o si no se puede, tengo dos formas rectangulares, las cuales tienen asignado una macro cada una para redirigir a ciertas hojas del libro, si en la tabla de base de datos la boleta en curso (que es siempre la del número más alto) tiene hasta 16 filas, le doy click a una de las formas para imprimir una hoja corta y si tiene hasta 32 filas (que es el maximo que me entra en una hoja A4) le doy click a la otra forma que me redirige as una hoja diseñada para imprimir en papel A4

Ahora bien, yo quiero que si en "BD BOL VENTAS" la cantidad de filas con el mismo número de boleta es de hasta 16, se vea solamente la forma rectangular que lleva la macro correspondiente a ese número de renglones en la boleta; y si es de más de 16 que se oculte esta y se visualice solamente la otra forma rectangular que lleva hasta la boleta de hasta 32 renglones.

Yo pensé en un formato condicional que le de el mismo color que el fondo a la forma que quiero ocultar, no se si se puede hacer eso, ustedes dirán si es posible o si hay un método más elegante para hacerlo

El ejemplo que subo es muy básico, hecho a "las patadas" :D

Espero que se entienda todo el lío que traté de explicar

Desde ya muchas gracias

Saludos

Jose

Libro1.xlsm

Share this post


Link to post
Share on other sites

Se me ocurrio algo mas sencillo, en el nuevo ejemplo puse dos rectángulos y una celda con números, se puede hacer que dependientes de esos números aparezca o desaparezca uno de los rectángulos

Saludos

Jose

Libro1.xlsm

Share this post


Link to post
Share on other sites

Observa que he cambiado los nombres a los rectángulos.

Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Address = "$C$14" Then
      ActiveSheet.Shapes("LARGA").Visible = False
      ActiveSheet.Shapes("CORTA").Visible = False      
      If Target > 32 Then
         ActiveSheet.Shapes("LARGA").Visible = True
      Else
         ActiveSheet.Shapes("CORTA").Visible = True
      End If
   End If
End Sub

 

Share this post


Link to post
Share on other sites

Buenas noches, coloqué el código en el archivo de ejemplo que subí anteriormente Antoni, pero no me funciona, no hace nada, no se que puedo estar haciendo mal, le coloqué sus respectivos nombres a los rectángulos, pero no funciona

Saludos 

Jose

Share this post


Link to post
Share on other sites
Hace 19 horas, jose_luisc dijo:

Buenas noches, coloqué el código en el archivo de ejemplo que subí anteriormente Antoni, pero no me funciona, no hace nada, no se que puedo estar haciendo mal, le coloqué sus respectivos nombres a los rectángulos, pero no funciona

Saludos 

Jose

Pues desde que subió el ejemplo Antoni si funciona al 100%.

Te voy a indicar con piedritas, sin molestar claro.

1.- Coloca el código de Antoni en el codigo de la hoja.

2.- Cambiales el nombre a los Shapes, del lado izquierdo de la barra de fórmulas. Lo seleccionas y cambias el nombre.

3.-Y si la celda C14 es mayor a 32 hace el cambio, si es menor hace el cambio.

Es Código es claro y preciso.

Saludos.

Share this post


Link to post
Share on other sites

Es verdad, lo probé en el ejemplo y funciona de maravillas, pero cuando lo pongo en mi archivo, al tener otro Worksheet_Change en la misma hoja me dice "Error de compilación: se ha detectado un nombre ambiguo: Worksheet_Change"

Como se hace en estos casos?

Saludos

Share this post


Link to post
Share on other sites
Hace 3 minutos , jose_luisc dijo:

Worksheet_Change en la misma hoja me dice "Error de compilación: se ha detectado un nombre ambiguo: Worksheet_Change"

Como se hace en estos casos?

Saludos

Amigo, con todo respeto lee un poco en la web, se que te da weba pero ayúdame con esto si?

Share this post


Link to post
Share on other sites
Hace 8 horas, jose_luisc dijo:

Es verdad, lo probé en el ejemplo y funciona de maravillas, pero cuando lo pongo en mi archivo, al tener otro Worksheet_Change en la misma hoja me dice "Error de compilación: se ha detectado un nombre ambiguo: Worksheet_Change"

Como se hace en estos casos?

Saludos

Junta los 2 códigos en un único procedimiento Worksheet_Change()

Share this post


Link to post
Share on other sites

Jose_luis...jose_luis....jose_luis......

Y como quieres que se te ayude si no sabemos cual es el otro código??? y que quieres hacer con el otro código???

Voy a jugar a las adivinanzas.....:

 

Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Address = "$C$14" Then
      ActiveSheet.Shapes("LARGA").Visible = False
      ActiveSheet.Shapes("CORTA").Visible = False      
      If Target > 32 Then
         ActiveSheet.Shapes("LARGA").Visible = True
      Else
         ActiveSheet.Shapes("CORTA").Visible = True
      End If
   End If

   AQUI PON TU OTRO CODIGO


End Sub

 

Fijate bien que el código de @Antoni solo se ejecutara si cambia el valor en la celda C14.

 

 

Saludos.

Share this post


Link to post
Share on other sites

:D Si Leopoldo, es verdad, es que estoy en el trabajo y no tengo acceso continuo al PC, aqui está el otro código, pero creo haberlo puesto como tu dices y no me funcionó, fijate si está bien redactado.

El otro código deja bloqueado la celda D7 despues de salir de ella y deja protejida la hoja como estaba anteriormente:

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Address = "$D$7" Then
ActiveSheet.Unprotect
ActiveCell.Locked = True
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowFiltering:=True, AllowUsingPivotTables:=True
Application.EnableEvents = True
End If
If Target.Address = "$H$3" Then
      ActiveSheet.Shapes("LARGA").Visible = False
      ActiveSheet.Shapes("CORTA").Visible = False
      If Target > 35 Then
         ActiveSheet.Shapes("LARGA").Visible = True
      Else
         ActiveSheet.Shapes("CORTA").Visible = True
      End If
   End If
End Sub

Share this post


Link to post
Share on other sites

Voy a probar poner los dos códigos en el archivo de ejemplo para ver si es ese el problema u otro, porque en la misma hojas tengo otros códigos  

Private Sub Worksheet_Activate()

Private Sub CommandButton1_Click()    

Private Sub TextBox1_Change()    

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 

Está cargada de códigos la hoja

Después de probar comento

Saludos

Share this post


Link to post
Share on other sites
Hace 9 minutos , jose_luisc dijo:

Voy a probar poner los dos códigos en el archivo de ejemplo para ver si es ese el problema u otro, porque en la misma hojas tengo otros códigos  

Private Sub Worksheet_Activate()

Private Sub CommandButton1_Click()    

Private Sub TextBox1_Change()    

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 

Está cargada de códigos la hoja

Después de probar comento

Saludos

😂😂😂

 

Share this post


Link to post
Share on other sites

Buenas noches, creo que encontré el posible problema, cuando la celda que se hace referencia lleva el mero número, se cumple el código sin problemas, pero cuando lleva una función que da como resultado ese mismo número, no se cumple.

Subo ejemplo 

Libro1.xlsm

Share this post


Link to post
Share on other sites
Hace 27 minutos , jose_luisc dijo:

Buenas noches, creo que encontré el posible problema, cuando la celda que se hace referencia lleva el mero número, se cumple el código sin problemas, pero cuando lleva una función que da como resultado ese mismo número, no se cumple.

Creo que si van a ser Huevos revueltos... 🤣😂

Amigo quieres corres y todavía no sabes gatear...

Así la situación es diferente....

DATE LA OPORTUNIDAD DE ESTUDIAR UN POCO....!!!

BRINDATE ESE REGALO...!!!

  1. Investiga siempre sobre el tema en este caso sobre Target y VBA.
  2.  Activar una Macro al cambiar el valor de una celda. 
  3. etc.

Nada más por no dejar así el tema, te doy mi ultimo regalo...

Private Sub Worksheet_Change(ByVal Target As Range)
    ActiveSheet.Shapes("LARGA").Visible = False
    ActiveSheet.Shapes("CORTA").Visible = False
    If Range("C14") > 16 Then
       ActiveSheet.Shapes("LARGA").Visible = True
    Else
       ActiveSheet.Shapes("CORTA").Visible = True
    End If
End Sub


Creo que voy a anotar tu nombre en una Hoja Negra....😉

Saludos.

 

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

×
×
  • Create New...

Important Information

Privacy Policy