Urge: Se mueve Posicion de botones

20/12/2004 - 13:52 por gema.bernardo | Informe spam
Hola,

En una hoja excel estoy añadiendo botones en varias celdas. El problema es
que algunos botones no se ubican dentro de la celda que le indico.

Todas estas celdas tienen un ancho de columna de 10 y un ancho de fila de
20.

Y los botones van a tener todos un Ancho = 19.5 y un Alto = 7.5.

Ejemplo añadir boton en celda G17:

Izquierda = .Range("G17").Left
Arriba = .Range(Ubicacion).Top
Ancho = 19.5
Alto = 7.5

Set bt = Sheets(1).Buttons.Add(Izquierda, Arriba, Ancho, Alto)
Sheets(1).Shapes(bt.name).IncrementLeft 10
Sheets(1).Shapes(bt.name).IncrementTop 10
bt.Placement = xlMoveAndSize

Esto va bien, hasta las celdas de una columna (en concreto, la columna CQ)
en la cual el boton añadido ya está desplazado más hacia la derecha y no
haria falta ejecutar:
Sheets(1).Shapes(bt.name).IncrementLeft 10
Sheets(1).Shapes(bt.name).IncrementTop 10

¿Como puedo hacer para que en cada una de las celdas se añada un boton
centrado en la celda, con las dimensiones de ancho y alto indicadas antes?

Nota: si en vez de ese ancho, se aplica:
Ancho = .Range(Ubicacion).Width
Alto = .Range(Ubicacion).Height
Tambien se desplazan hacia la derecha ¿pq ocurre esto???


Un saludo, Gema.

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
21/12/2004 - 05:40 | Informe spam
hola, Gema !

... estoy añadiendo botones en varias celdas ... problema ... algunos botones no se ubican dentro de la celda que le indico.
... estas celdas tienen un ancho de columna de 10 y un ancho de fila de 20.
... los botones van a tener todos un Ancho = 19.5 y un Alto = 7.5. [...]
Izquierda = .Range("G17").Left
Arriba = .Range(Ubicacion).Top
Ancho = 19.5
Alto = 7.5 [...]
¿... hacer ... que ... se añada un boton centrado en la celda, con las dimensiones de ancho y alto indicadas antes? [...]



toma nota de lo siguiente con respecto de las propiedades 'de medidas' de los objetos...
-> Width, Height y RowHeight se refieren a una medida en puntos [1/72 de pulgada... 72 pixeles por pulgada]
-> ColumnWidth se refiere al ancho de la columna PERO... basado en el ancho de la fuente 'normal... en uso'
[poca relacion existe -por no decir que ninguna- entre las 'medidas' de una columna 'Width' y 'ColumnWidth']
-> si para las propiedades de ancho y alto ->del boton<- usas 'las mismas' [Width y Height] ->del 'rango'<- [p.e. 'G17']
Y las 'distancias' [Izquierda=Left y Arriba=Top] son las mismas del rango [aqui 'hablamos' de puntos de documento]
las medidas [y ubicacion] del boton seran ->las mismas<- que el rango [el cual sera 'cubierto' por el objeto]
-> si lo que 'buscas' es que el boton quede ->dentro<- de la celda SIN CUBRIRLA [totalmente]...
1° 'aumenta' unos puntos a las propiedades 'Izquierda/Left' Y 'Arriba/Top' ->del rango<- [donde se ubicara el boton]
2° 'disminuye/resta' EL DOBLE de dichos puntos a las propiedades 'Ancho/Width' Y 'Alto/Height' [del mismo rango]
[p.e. si deseas que el boton 'mantenga' una distancia de los bordes de la celda digamos de 2 PUNTOS]...
With .Range(Ubicacion)
Izquierda = .Left + 2
Arriba = .Top + 2
Ancho = .Wdth - 4
Alto = .Height - 4
End With

saludos,
hector.
Respuesta Responder a este mensaje
#2 gema.bernardo
21/12/2004 - 12:48 | Informe spam
Ok, se me ha aclarado cómo tratar las medidas de los botones respecto a
las de las celdas, pero sigue el movimiento:

He probado a hacer lo mismo en otro documento y todo va bien como me
indicas, pero si modifico el Zoom o Inmovilizo paneles o añado otros
botones manualmente, empieza a dejar de funcionar ¿a que se puede
deber?




Héctor Miguel wrote:

hola, Gema !

> ... estoy añadiendo botones en varias celdas ... problema ... algunos


botones no se ubican dentro de la celda que le indico.
> ... estas celdas tienen un ancho de columna de 10 y un ancho de fila de 20.
> ... los botones van a tener todos un Ancho = 19.5 y un Alto = 7.5. [...]
> Izquierda = .Range("G17").Left
> Arriba = .Range(Ubicacion).Top
> Ancho = 19.5
> Alto = 7.5 [...]
> ¿... hacer ... que ... se añada un boton centrado en la celda, con las


dimensiones de ancho y alto indicadas antes? [...]

toma nota de lo siguiente con respecto de las propiedades 'de medidas' de


los objetos...
-> Width, Height y RowHeight se refieren a una medida en puntos [1/72 de


pulgada... 72 pixeles por pulgada]
-> ColumnWidth se refiere al ancho de la columna PERO... basado en el ancho


de la fuente 'normal... en uso'
[poca relacion existe -por no decir que ninguna- entre las 'medidas' de


una columna 'Width' y 'ColumnWidth']
-> si para las propiedades de ancho y alto ->del boton<- usas 'las mismas'


[Width y Height] ->del 'rango'<- [p.e. 'G17']
Y las 'distancias' [Izquierda=Left y Arriba=Top] son las mismas del


rango [aqui 'hablamos' de puntos de documento]
las medidas [y ubicacion] del boton seran ->las mismas<- que el rango


[el cual sera 'cubierto' por el objeto]
-> si lo que 'buscas' es que el boton quede ->dentro<- de la celda SIN


CUBRIRLA [totalmente]...
1° 'aumenta' unos puntos a las propiedades 'Izquierda/Left' Y


'Arriba/Top' ->del rango<- [donde se ubicara el boton]
2° 'disminuye/resta' EL DOBLE de dichos puntos a las propiedades


'Ancho/Width' Y 'Alto/Height' [del mismo rango]
[p.e. si deseas que el boton 'mantenga' una distancia de los bordes de la


celda digamos de 2 PUNTOS]...
With .Range(Ubicacion)
Izquierda = .Left + 2
Arriba = .Top + 2
Ancho = .Wdth - 4
Alto = .Height - 4
End With

saludos,
hector.
Respuesta Responder a este mensaje
#3 Héctor Miguel
21/12/2004 - 22:59 | Informe spam
hola, Gema !

Ok ... como tratar las medidas de los botones respecto a las de las celdas, pero sigue el movimiento:
... lo mismo en otro documento y todo va bien ... pero si modifico el Zoom o Inmovilizo paneles [...]



si te sirve 'recordar' el tema 'tal como lo vimos' hace tiempo, te pego el hilo de ese entonces...
['toma' SOLO lo que 'corresponda']
si el asunto 'va' por caminos diferentes... ¿comentas?
saludos,
hector.
tema de sept-21-2002 ==hola, Gema !

... creo botones dinamicamente con el siguiente codigo [...] dependiendo del zoom de la hoja
... tengo que aplicarle desplazamientos arbitrarios para que el boton se ajuste a la celda indicada [...]
... crear un boton centrado en una celda ... celdas con diferentes anchos y altos???



[hasta donde se] el zoom de una hoja [que en realidad es una propiedad de un objeto 'window']
'afecta' las dimensiones y la posicion de los objetos de la hoja [como 'se ven' y 'donde caen' en pantalla]
-> la propiedad zoom es 'aplicable' ->solamente<- a la ventana 'activa' [la hoja que esta 'en pantalla']
-> la 'ubicacion' de los objetos de la hoja, se 'mide' en ->puntos de documento<-
-> existe tambien la posibilidad de una 'distorsion' [diferente en cada pc] por el 'driver' de la tarjeta de video
-> seria necesario recurrir a las API's para obtener/modificar estas [y otras] variantes

la 'solucion' que te propongo al final [con ligeras modificaciones a la anterior], se basa en
-> activar la hoja donde se incrustaran los botones [para estar en condiciones de...]
-> 'detectar' el zoom 'actual'... establecerlo en un zoom de 100%
-> incrustrar el/los boton/es de comando [y 'devolverle' el zoom 'original' a ->la ventana<-]
-> opcionalmente, activar de nuevo la hoja 'inicial [en el caso de que NO era la 'activa']

si cualquier duda... ¿comentas?
saludos,
hector.
en un modulo de codigo 'normal' ==Private Sub AgregarBoton( _
ByVal Hoja As Worksheet, _
ByVal Ubicacion As String, _
ByVal Título As String, _
ByVal Macro As String)
Dim Izquierda As Single, Arriba As Single, Ancho As Single, Alto As Single, _
Regresar As Boolean, HojaInicial As String, ZoomOriginal As Integer
Application.ScreenUpdating = False
If Hoja.Name <> ActiveSheet.Name Then
HojaInicial = ActiveSheet.Name
Regresar = True
Hoja.Activate
End If
With ActiveWindow
ZoomOriginal = .Zoom
.Zoom = 100
End With
With Hoja
With .Range(Ubicacion)
Izquierda = .Left
Arriba = .Top
Ancho = .Width
Alto = .Height
End With
With .Buttons.Add(Izquierda, Arriba, Ancho, Alto)
.Caption = Título
.OnAction = Macro
End With
End With
ActiveWindow.Zoom = ZoomOriginal
If Regresar Then Sheets(HojaInicial).Activate
End Sub
Respuesta Responder a este mensaje
#4 gema.bernardo
22/12/2004 - 09:13 | Informe spam
Héctor, muchisimas gracias!!!!, esto me estaba superando y no daba con la
solución.

Este es mi correo por si necesitas algo:


:-))))))))))))


Héctor Miguel wrote:

hola, Gema !

> Ok ... como tratar las medidas de los botones respecto a las de las


celdas, pero sigue el movimiento:
> ... lo mismo en otro documento y todo va bien ... pero si modifico el Zoom


o Inmovilizo paneles [...]

si te sirve 'recordar' el tema 'tal como lo vimos' hace tiempo, te pego el


hilo de ese entonces...
['toma' SOLO lo que 'corresponda']
si el asunto 'va' por caminos diferentes... ¿comentas?
saludos,
hector.
tema de sept-21-2002 ==> hola, Gema !

> ... creo botones dinamicamente con el siguiente codigo [...] dependiendo


del zoom de la hoja
> ... tengo que aplicarle desplazamientos arbitrarios para que el boton se


ajuste a la celda indicada [...]
> ... crear un boton centrado en una celda ... celdas con diferentes anchos


y altos???

[hasta donde se] el zoom de una hoja [que en realidad es una propiedad de un


objeto 'window']
'afecta' las dimensiones y la posicion de los objetos de la hoja [como 'se


ven' y 'donde caen' en pantalla]
-> la propiedad zoom es 'aplicable' ->solamente<- a la ventana 'activa' [la


hoja que esta 'en pantalla']
-> la 'ubicacion' de los objetos de la hoja, se 'mide' en ->puntos de


documento<-
-> existe tambien la posibilidad de una 'distorsion' [diferente en cada pc]


por el 'driver' de la tarjeta de video
-> seria necesario recurrir a las API's para obtener/modificar estas [y


otras] variantes

la 'solucion' que te propongo al final [con ligeras modificaciones a la


anterior], se basa en
-> activar la hoja donde se incrustaran los botones [para estar en


condiciones de...]
-> 'detectar' el zoom 'actual'... establecerlo en un zoom de 100%
-> incrustrar el/los boton/es de comando [y 'devolverle' el zoom 'original'


a ->la ventana<-]
-> opcionalmente, activar de nuevo la hoja 'inicial [en el caso de que NO


era la 'activa']

si cualquier duda... ¿comentas?
saludos,
hector.
en un modulo de codigo 'normal' ==> Private Sub AgregarBoton( _
ByVal Hoja As Worksheet, _
ByVal Ubicacion As String, _
ByVal Título As String, _
ByVal Macro As String)
Dim Izquierda As Single, Arriba As Single, Ancho As Single, Alto As


Single, _
Regresar As Boolean, HojaInicial As String, ZoomOriginal As Integer
Application.ScreenUpdating = False
If Hoja.Name <> ActiveSheet.Name Then
HojaInicial = ActiveSheet.Name
Regresar = True
Hoja.Activate
End If
With ActiveWindow
ZoomOriginal = .Zoom
.Zoom = 100
End With
With Hoja
With .Range(Ubicacion)
Izquierda = .Left
Arriba = .Top
Ancho = .Width
Alto = .Height
End With
With .Buttons.Add(Izquierda, Arriba, Ancho, Alto)
.Caption = Título
.OnAction = Macro
End With
End With
ActiveWindow.Zoom = ZoomOriginal
If Regresar Then Sheets(HojaInicial).Activate
End Sub
Respuesta Responder a este mensaje
#5 Héctor Miguel
22/12/2004 - 19:54 | Informe spam
hola, Gema !

... me estaba superando y no daba con la solucion [...]



gracias por el 'feed-back' ;) [aunque ya lo habiamos visto] te 'sugiero'...
- 'acumula' en algun archivo 'tips' del foro [seguramente seran de utilidad en algun momento]
- no se te olvide que tambien 'repasamos' el caso de eliminar botones [ojo con las validaciones]

[agradecido por tu oferta] ;)
-conserva mis datos y no te extrañe si 'de repente'... 'te pego un grito' :))

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