Ayuda Héctor... Problemas al eliminar botones!!

23/06/2004 - 10:44 por gema.bernardo | Informe spam
Hola Héctor!

He utilizado la funcion que me proporcionaste para eliminar botones y todo
correcto, consigo borrar los botones. Pero como resultado de esta accion
me ha ocurrido algo curioso y que me preocupa.

EL procedimiento de borrado indicado es el siguiente:
-
Para eliminar los botones [y/o cualquier figura] en una celda especifica...
es necesario hacer un 'barrido' por TODAS los objetos 'Shape' de la
hoja y
'comparar' su ubicacion ;)
un 'ejemplo' de un procedimiento que puedas usar de manera
'independiente'
[como el de 'AgregarBotones'] seria...
en un modulo de codigo 'normal' ==Private Sub EliminarBoton( _
ByVal Hoja As Worksheet, _
ByVal Celda As String)
Dim Boton As Shape
With Hoja
For Each Boton In .Shapes
If Boton.TopLeftCell.Address = Range(Celda).Address Then Boton.Delete
Next
End With
End Sub
ššššššššššššš
y... la manera de 'llamarlo' [desde cualquier otra parte de tu codigo]
seria...
[... otras lineas en tu codigo ...]
EliminarBoton ActiveSheet, "b2"

[... otras lineas en tu codigo ...]

-

Me ocurre lo siguiente:
En la hoja tenia varias celdas definidas con Validation en forma de List
rellenad con un Rango de una columna de la misma hoja.
Ahora en estas celdas se mantiene el Validation, pero en ningun momento me
sale la flecha que permite desplegar la lista definida. ¿He borrado el
boton de la flecha?¿que puede haber ocurrido?¿como puedo recuperar la
lista de validation?

He probado a hacer un nuevo validation en cualquier otra celda de la hoja
y tampoco me sale la flecha!! Debe de ser una tonteria, pero no sé como
arreglarlo.

Como última opcion, voy a poner un Control ToolBox de Lista desplegable y
modificar codigo interno... aunque me es lioso por la gran funcionalidad
que ya tiene desarrollada la hoja.


A ver si sabrias decirme algo.. me urge.

Gracias,un saludo:
Gema Bernardo

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
24/06/2004 - 03:19 | Informe spam
hola, Gema !

... la funcion ... para eliminar botones y ... consigo borrar los botones.
... como resultado de esta accion me ha ocurrido algo ... que me preocupa.
... tenia varias celdas ... con Validation ... List ... con un Rango [...]
... se mantiene el Validation, pero en ningun momento me sale la flecha que permite desplegar la lista [...]
¿He borrado el boton de la flecha? ¿que puede haber ocurrido? ¿como puedo recuperar la lista de validation?
He probado a hacer un nuevo validation en cualquier otra celda de la hoja y tampoco me sale la flecha!! [...]



1.- la parte 'central' en el procedimiento [sugerido] para la eliminacion de botones =>segun su 'ubicacion'<= es...
For Each Boton In .Shapes
If Boton.TopLeftCell.Address = Range(Celda).Address Then Boton.Delete
Next



2.- [observa que] 'compara' SI el boton esta 'ubicado' en la celda 'indicada' =>para 'poder quitarlo'<= OJO
por tal 'condicionante' y ANTES DE ['intentar' siquiera] ELIMINAR 'otro' objeto... =>el codigo 'debio' FALLAR< una 'lista desplegable' [de reglas] de validacion [aunque tambien] 'pasa' por la coleccion de objetos 'Shape'...
NO 'tiene' la propiedad 'TopLeftCell'... =>debio 'aparecer' un mensaje de error 1004 en tiempo de ejecucion.<
3.- =>la unica<= forma en que 'ese' error se puede 'saltar' es...
usando una instruccion 'On Error Resume Next' [o 'similar'] =>ANTES<= de la instruccion del 'borrado'
ya sea porque 'le fue agregada' o... el codigo 'forma parte' de 'otro' codigo =>que tiene<= esa instruccion

4.- hay otras formas de 'prevenir', para que NO se llegue a 'presentar' ese error [p.e.]
'filtrar' los objetos [Shape] ANTES de 'llegarle' a la seccion de 'eliminacion'... [una manera es...]
[para el caso 'especifico' de que se trata de 'botones' de comando de la barra de herramientas 'formularios']
For Each Boton In .Shapes
If Boton.FormControlType = xlButtonControl Then
If Boton.TopLeftCell.Address = Range(Celda).Address Then Boton.Delete
End If
Next

=> [nuevamente...] 'pudiera fallar' si dentro de la coleccion de objetos 'shape' de la hoja... hay 'de otros tipos' :(

5.- ahora... la parte 'fatidica' de esta situacion :((
una vez 'eliminado' =>cualquier<= objeto 'Shape-flecha' de lista desplegable de validadion...
=>NO hay forma<= de 'volver' a 'presentar' las flechas de listas deslegables de validacion [en 'esa' hoja] :((
=> solo queda... copiar [todas?] las celdas [o el rango 'usado'] =>a una hoja NUEVA<= OJO: NO copiar 'la hoja'

[personalmente] LAMENTO no haber podido anticipar mas 'variantes operativas' :((
y... me interesa [y te agradeceria] si puedes 'confirmar' lo de la instruccion 'On Error Resume Next' [o 'similar'] ;)

saludos,
hector.
Respuesta Responder a este mensaje
#2 gema.bernardo
29/06/2004 - 10:52 | Informe spam
Hola Héctor!

Perdona por haber tardado en responderte, tenia que presentar una demo
para el cliente y estaba un poco agobiada...

Te cuento que pasó al final con el problema de eliminar los botones del
area de trabajo...

Lo que contabas era justo lo que pasaba, al tratar de eliminar un objeto
que no fuera un boton la propiedad TopLeftCell fallaba El hecho de
estar en depuracion y saltarme esa instruccion e ir directamente a la
sentencia de borrado, fue lo que produjo que en las celdas con Validation
las flechas se me borraran.

Menos mal que ahora me estan pidiendo cambios en el diseño de las hojas y
casi tengo que empezar desde cero!! Que susto me dí al ver que no podia
recuperar el anterior diseño!! jejeje.


Bueno, te cuento la solucion que he tomado yo, respecto a lo que me
respondias:
1)Empezar una hoja nueva ;-)
2)La funcion de borrado de un boton quedaria asi:
Private Sub BorrarBoton( _
ByVal Hoja As Worksheet, _
ByVal Celda As String)
Dim Boton As Shape

On Error Resume Next

With Hoja

For Each Boton In .Shapes

If Boton.FormControlType = xlButtonControl Then

If Boton.TopLeftCell.Address = Range(Celda).Address Then
Boton.Delete
End If

End If
Next

End With
End Sub

De esta forma me aseguro que lo que borro es un boton, y tampoco fallan
las comparaciones: Boton.FormControlType y Boton.TopLeftCell por el uso de
On Error Resume Next.


Espero haberme explicado bien.
Un saludo y gracias por todo.

Gema Bernardo.




Héctor Miguel wrote:

hola, Gema !

> ... la funcion ... para eliminar botones y ... consigo borrar los botones.
> ... como resultado de esta accion me ha ocurrido algo ... que me preocupa.
> ... tenia varias celdas ... con Validation ... List ... con un Rango [...]
> ... se mantiene el Validation, pero en ningun momento me sale la flecha


que permite desplegar la lista [...]
> ¿He borrado el boton de la flecha? ¿que puede haber ocurrido? ¿como puedo


recuperar la lista de validation?
> He probado a hacer un nuevo validation en cualquier otra celda de la hoja


y tampoco me sale la flecha!! [...]

1.- la parte 'central' en el procedimiento [sugerido] para la eliminacion de


botones =>segun su 'ubicacion'<= es...
> For Each Boton In .Shapes
> If Boton.TopLeftCell.Address = Range(Celda).Address Then Boton.Delete
> Next

2.- [observa que] 'compara' SI el boton esta 'ubicado' en la celda


'indicada' =>para 'poder quitarlo'<= OJO
por tal 'condicionante' y ANTES DE ['intentar' siquiera] ELIMINAR


'otro' objeto... =>el codigo 'debio' FALLAR<> una 'lista desplegable' [de reglas] de validacion [aunque tambien]
'pasa' por la coleccion de objetos 'Shape'...
NO 'tiene' la propiedad 'TopLeftCell'... =>debio 'aparecer' un mensaje


de error 1004 en tiempo de ejecucion.<
3.- =>la unica<= forma en que 'ese' error se puede 'saltar' es...
usando una instruccion 'On Error Resume Next' [o 'similar'] =>ANTES<de la instruccion del 'borrado'
ya sea porque 'le fue agregada' o... el codigo 'forma parte' de 'otro'


codigo =>que tiene<= esa instruccion

4.- hay otras formas de 'prevenir', para que NO se llegue a 'presentar' ese


error [p.e.]
'filtrar' los objetos [Shape] ANTES de 'llegarle' a la seccion de


'eliminacion'... [una manera es...]
[para el caso 'especifico' de que se trata de 'botones' de comando de


la barra de herramientas 'formularios']
For Each Boton In .Shapes
If Boton.FormControlType = xlButtonControl Then
If Boton.TopLeftCell.Address = Range(Celda).Address Then Boton.Delete
End If
Next

=> [nuevamente...] 'pudiera fallar' si dentro de la coleccion de objetos


'shape' de la hoja... hay 'de otros tipos' :(

5.- ahora... la parte 'fatidica' de esta situacion :((
una vez 'eliminado' =>cualquier<= objeto 'Shape-flecha' de lista


desplegable de validadion...
=>NO hay forma<= de 'volver' a 'presentar' las flechas de listas


deslegables de validacion [en 'esa' hoja] :((
=> solo queda... copiar [todas?] las celdas [o el rango 'usado'] =>a una


hoja NUEVA<= OJO: NO copiar 'la hoja'

[personalmente] LAMENTO no haber podido anticipar mas 'variantes operativas'


:((
y... me interesa [y te agradeceria] si puedes 'confirmar' lo de la


instruccion 'On Error Resume Next' [o 'similar'] ;)

saludos,
hector.
Respuesta Responder a este mensaje
#3 Héctor Miguel
29/06/2004 - 11:23 | Informe spam
hola, Gema !

... haber tardado en responderte [...]
... justo ... al tratar de eliminar un objeto que no fuera un boton la propiedad TopLeftCell fallaba [...]
... ahora me estan pidiendo cambios en el diseño de las hojas [...]



pues... ¡ nada !!! que gracias a ti [por el ´feed-back'] ;)
y sobre todo... por la 'confirmacion' del [similar al] 'On Error Resume Next' :o\

saludos,
hector.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida