Crear shapes y borrarlos

30/08/2005 - 01:11 por Alejandro Garrammone | Informe spam
Hola grupo! hoy he posteado algo en el grupo y KL lo ha respondido de mil
maravillas, pero tengo otro problema.
El tema es así, yo con una macro deseo crear por ejemplo una linea o un
rectángulo, le he puesto un nombre dentro del cuerpo de la macro y he
guardado el nombre en una celda de excel. Hasta aquí todo bien, el problema
es que necesito luego que otra macro (en caso de ejecutarla) borre ese
rectángulo o línea que he creado y al utilizar el nombre que le he puesto el
debbugger me dice que no existe nada con ese nombre.
La pregunta es...¿hay alguna manera de, sin saber el nombre que se ha
puesto, borrar ese rectangulo o línea? lo único que se con seguridad son las
coordenadas en las cuales fueron creadas.

Gracias por todo,

Alejandro

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
30/08/2005 - 02:50 | Informe spam
hola, Alejandro !

... con una macro deseo crear por ejemplo una linea o un rectangulo
... le he puesto un nombre dentro... de la macro y...guardado el nombre en una celda
... necesito luego que otra macro (en caso de ejecutarla) borre ese rectangulo o linea que he creado
... al utilizar el nombre que le he puesto el debbugger me dice que no existe nada con ese nombre.
... alguna manera de, sin saber el nombre que se ha puesto, borrar ese rectangulo o lonea?
lo unico que se con seguridad son las coordenadas en las cuales fueron creadas.



1) su utilizas una instruccion para eliminar objetos 'shape' +/- como la siguiente...
ActiveSheet.Shapes("Nombre del shape").Delete
la unica causa por la que pudier fallar es porque NO exista un objeto 'shape' ->con ese nombre<- en 'esa' hoja
-> ya se habra eliminado anteriormente ?
-> se la habra 'cambiado' de nombre ?
-> se encontrara 'en otra hoja' ?
[incuso, si existen varios objetos 'shape' con el mismo nombre... se eliminaria ->el primero<- de la coleccion 'shapes']

2) para eliiminar un 'shape' basado en sus coordenadas la [probablemente] 'unica' forma seria 'barriendo' los shapes de la hoja [p.e.]
Dim Fig As Shape
For Each Fig In ActiveSheet.Shapes
If Fig.Left = x And Fig.Top = y Then Fig.Delete
Next
=> donde 'x' es la coordenada izquierda y la 'y' es la coordenada superior
[nuevamente] si existen varios 'shapes' en esa ubicadion... se eliminarian TODOS :-(
he 'descartado' la busqueda por nombres [por tu comentario]... aunque creo que podrias 'combinar' opciones :)

saludos,
hector.
Respuesta Responder a este mensaje
#2 Alejandro Garrammone
30/08/2005 - 03:03 | Informe spam
Hola Héctor!
No entiendo bien lo que me has querido decir, pero lo que puedo hacer es
poner aquí un codigo de ejemplo con el cual creo el shape y luego tú me
puedes decir cómo borrarlo.

temp1 = ((38.25) / 2)
temp2 = 153 + temp1
Set myDocument = Worksheets(1)
With myDocument.Shapes.AddLine(19.5, temp2, 68.25, temp2)
.Name = "Linea1"
End With
Range("IA1").Value = "Linea1"

Gracias por todo!

"Héctor Miguel" escribió en el mensaje
news:%
hola, Alejandro !

... con una macro deseo crear por ejemplo una linea o un rectangulo
... le he puesto un nombre dentro... de la macro y...guardado el nombre
en una celda
... necesito luego que otra macro (en caso de ejecutarla) borre ese
rectangulo o linea que he creado
... al utilizar el nombre que le he puesto el debbugger me dice que no
existe nada con ese nombre.
... alguna manera de, sin saber el nombre que se ha puesto, borrar ese
rectangulo o lonea?
lo unico que se con seguridad son las coordenadas en las cuales fueron
creadas.



1) su utilizas una instruccion para eliminar objetos 'shape' +/- como la
siguiente...
ActiveSheet.Shapes("Nombre del shape").Delete
la unica causa por la que pudier fallar es porque NO exista un objeto
'shape' ->con ese nombre<- en 'esa' hoja
-> ya se habra eliminado anteriormente ?
-> se la habra 'cambiado' de nombre ?
-> se encontrara 'en otra hoja' ?
[incuso, si existen varios objetos 'shape' con el mismo nombre... se
eliminaria ->el primero<- de la coleccion 'shapes']

2) para eliiminar un 'shape' basado en sus coordenadas la [probablemente]
'unica' forma seria 'barriendo' los shapes de la hoja [p.e.]
Dim Fig As Shape
For Each Fig In ActiveSheet.Shapes
If Fig.Left = x And Fig.Top = y Then Fig.Delete
Next
=> donde 'x' es la coordenada izquierda y la 'y' es la coordenada superior
[nuevamente] si existen varios 'shapes' en esa ubicadion... se
eliminarian TODOS :-(
he 'descartado' la busqueda por nombres [por tu comentario]... aunque
creo que podrias 'combinar' opciones :)

saludos,
hector.

Respuesta Responder a este mensaje
#3 Héctor Miguel
30/08/2005 - 04:12 | Informe spam
hola, Alejandro !

... codigo de ejemplo con el cual creo el shape y luego... me puedes decir como borrarlo.
temp1 = ((38.25) / 2)
temp2 = 153 + temp1
Set myDocument = Worksheets(1)
With myDocument.Shapes.AddLine(19.5, temp2, 68.25, temp2)
.Name = "Linea1"
End With
Range("IA1").Value = "Linea1"



[solo] algunas 'observaciones' de -posibles- causas del error :(
[creo que] todo esta 'orientado' a definir -exactamente- en que hoja se incrusta el shape y en cual se deposita 'el nombre' :)

1) el shape lo incrustas en ->Worksheets(1)<-
Worksheets(1) ES la primer hoja en la coleccion de hojas -> en el libro <-
-> pudiera estar oculta [o no]... -> el usuario [quizas] podria 'moverla' de ubicacion/indice/posicion/...
[posteriormente pudiera YA NO 'ser la misma'] -?-

2) el nombre que le asignas... lo 'depositas' EN ->Range("IA1").Value = "Linea1"<-
Range("IA1") ES ... la celda 'IA1' ->de la hoja ACTIVA<-
-> la hoja 'activa'... pudiera [o no] ser 'la misma' que la primer hoja en la coleccion de hojas en el libro -?-
-> podrias quizas 'asegurarte' si 'casas' la celda donde se deposita el nombre CON LA MISMA hoja donde se incrusta el shape [p.e.]
cambia de -> Range("IA1").Value = "Linea1"
y pon mejor -> myDocument.Range("IA1").Value = "Linea1"

3) si ninguno de los 'supuestos' [de mi imagincion] anteriores pudiera estar 'interfiriendo' en el 'cruce' de 'shape' Y 'nombre'...
-> debiera ser 'suficiente' eliminar 'esa mismo shape' con una instruccion +/- como la siguiente...
Worksheets(1).Shapes("Linea1").Delete
o... suponiendo que Worksheets(1) es tambien la hoja ['activa' cuando] donde se deposito 'el nombre' del shape...
Worksheets(1).Shapes(Worksheets(1).Range("ia1")).Delete

comentas?
saludos,
hector.
Respuesta Responder a este mensaje
#4 Alejandro Garrammone
30/08/2005 - 06:19 | Informe spam
Héctor, lo solucioné con tu segunda opción de el post anterior, ya que es
algo bastante fijo y con un par de funciones que tomen como parametros las
coordenadas se soluciona rápidamente. Con respecto este último comentario,
realmente me ayudó bastante a emprolijar el código que he ido generando
(hace como 2 años que no escribo nada en VBA), pero ojo!, de todas maneras
algunas veces sigo sin entender los errores que me da el VBA, pues en este
caso en particular, sólo debo trabajar con una sola hoja del libro (en
realidad, el libro tiene sólo una hoja:) ).
Te mando un saludo, y te doy las gracias por haberme prestado una ayuda
incalculable.

Salu2,

Alejandro

"Héctor Miguel" escribió en el mensaje
news:
hola, Alejandro !

... codigo de ejemplo con el cual creo el shape y luego... me puedes
decir como borrarlo.
temp1 = ((38.25) / 2)
temp2 = 153 + temp1
Set myDocument = Worksheets(1)
With myDocument.Shapes.AddLine(19.5, temp2, 68.25, temp2)
.Name = "Linea1"
End With
Range("IA1").Value = "Linea1"



[solo] algunas 'observaciones' de -posibles- causas del error :(
[creo que] todo esta 'orientado' a definir -exactamente- en que hoja se
incrusta el shape y en cual se deposita 'el nombre' :)

1) el shape lo incrustas en ->Worksheets(1)<-
Worksheets(1) ES la primer hoja en la coleccion de hojas -> en el libro
<-
-> pudiera estar oculta [o no]... -> el usuario [quizas] podria
'moverla' de ubicacion/indice/posicion/...
[posteriormente pudiera YA NO 'ser la misma'] -?-

2) el nombre que le asignas... lo 'depositas' EN ->Range("IA1").Value =
"Linea1"<-
Range("IA1") ES ... la celda 'IA1' ->de la hoja ACTIVA<-
-> la hoja 'activa'... pudiera [o no] ser 'la misma' que la primer hoja
en la coleccion de hojas en el libro -?-
-> podrias quizas 'asegurarte' si 'casas' la celda donde se deposita el
nombre CON LA MISMA hoja donde se incrusta el shape [p.e.]
cambia de -> Range("IA1").Value = "Linea1"
y pon mejor -> myDocument.Range("IA1").Value = "Linea1"

3) si ninguno de los 'supuestos' [de mi imagincion] anteriores pudiera
estar 'interfiriendo' en el 'cruce' de 'shape' Y 'nombre'...
-> debiera ser 'suficiente' eliminar 'esa mismo shape' con una
instruccion +/- como la siguiente...
Worksheets(1).Shapes("Linea1").Delete
o... suponiendo que Worksheets(1) es tambien la hoja ['activa' cuando]
donde se deposito 'el nombre' del shape...
Worksheets(1).Shapes(Worksheets(1).Range("ia1")).Delete

comentas?
saludos,
hector.

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