Crear Botones

21/06/2004 - 17:47 por gema.bernardo | Informe spam
Hola Héctor.. y demás gente!

Hace unos días me respondiste a la duda de como crear botones
dinámicamente en una hoja excel. Lo que contabas es totalmente válido,
pero no del todo aplicable a mi caso... Me explico:

La idea es crear botones en una hoja en posiciones dinamicas y con
diferentes funcionalidades... Tal y como indicabas, me creo un boton de
formulario y le asigno una posicion y una macro a ejecutar tal y como se
puede ver en el código q me pasaste:

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
With Hoja
Izquierda = .Range(Ubicacion).Left
Arriba = .Range(Ubicacion).Top
Ancho = .Range(Ubicacion).Width
Alto = .Range(Ubicacion).Height
With .Buttons.Add(Izquierda, Arriba, Ancho, Alto)
.Caption = Título
.OnAction = Macro
End With
End With
End Sub

Ejecutando este procedimiento todo ok... pero como le puedo pasar
parametrod a la macro???? La idea es ahorrar en macros y no tener
1macro/boton dado que voy a tener del orden de 120 botones, pero la
funcionalidad solo varia de pintar en una u otra hoja. Ejemplo:

Tengo que construir una tabla con dos filas y dos columnas en "hoja1":

Dia 1 | BOTON1
Dia 2 | BOTON2

y quiero que usando la misma macro para los dos botones,
- Si pincho en BOTON1, le paso el parametro 1 a la macro, y pinto en la
celda A1 de la "hoja2": DIA 1.
- Si pincho en BOTON1, le paso el parametro 1 a la macro, y pinto en la
celda A1 de la "hoja3": DIA 2.


Y por ultimo una curiosidad... cual es la diferencia entre usar un boton
de Formulario y un Control ToolBox?????????

Un saludo de una informatica recien llegada al mundo del EXCEL ;-) y
gracias por adelantado.

Gema Bernardo.
 

Leer las respuestas

#1 Héctor Miguel
22/06/2004 - 06:48 | Informe spam
hola, Gema !

... como crear botones dinamicamente ... totalmente valido ... pero no del todo aplicable a mi caso...
... este procedimiento todo ok... pero como le puedo pasar parametros a la macro????
... idea es ahorrar en macros y no tener 1macro/boton ... voy a tener del orden de 120 botones
... la funcionalidad solo varia de pintar en una u otra hoja. Ejemplo:
Dia 1 | BOTON1
Dia 2 | BOTON2
y quiero que usando la misma macro para los dos botones,
- Si pincho en BOTON1, le paso el parametro 1 a la macro, y pinto en la celda A1 de la "hoja2": DIA 1.
- Si pincho en BOTON2, le paso el parametro 2 a la macro, y pinto en la celda A1 de la "hoja3": DIA 2.

Y ... una curiosidad... cual es la diferencia entre usar un boton de Formulario y un Control ToolBox?????????



para la primera parte de esta consulta [y segun 'entiendo'], la 'tematica' es +/- como sigue...
Boton1 => 'DIA 1' [en la celda 'A1'] => de la 'Hoja2'
Boton2 => 'DIA 2' [en la celda 'A1'] => de la 'Hoja3' [... hasta ...]
Boton120 => 'DIA 120' [en la celda 'A1'] => de la 'Hoja121'
[es decir...] 'el numero' del boton ES el numero de dia [en la celda 'A1'] de la hoja [numero_de_boton + 1]
=>se supone que la hoja a la que 'afectara' el boton [segun su numero]... EXISTE !!!<si lo anterior es 'acertado'... 'basta' con que la macro 'unica/general'... 'tome' [o... 'lea'] el numero del boton 'clickado' ;)
=>para 'asegurar' la correcta 'lectura' del numero de boton... 'asegurate' que a la hora de 'generarlo/s'...
'exista' UN ESPACIO entre el 'nombre' del boton y su numero 'correspondiente'< el 'como se las averigue' la macro [general/unica] para todos los botones... te expongo un ejemplo al final ;)

con respecto de la diferencia entre los objetos de las barras de herramientas [formularios - cuadro de controles]...
- los de 'cuadro de controles' NO tienen una propiedad 'OnAction' [para 'asignar' macros a los mismos] :((
- aunque tambien los puedes 'incrustar' en hojas [por codigo]...
=> las macros que 'ejecutan' estan 'asociadas' a eventos [p.e. 'click'] en el modulo de codigo de la hoja donde 'estan'
=> al crearlos 'al vuelo'... [tambien] es necesario 'generar' sus codigos [para cada uno de ellos] :((
=> lo anterior... nos deja con la necesidad de 'generar' [por lo menos] TRES lineas de codigo para cada uno :(((
y... si la idea es 'ahorrar' en macros... \׆×/

¿comentas?
saludos,
hector.
- ... usando la 'misma' macro [AgregarBoton] ...
macros en un modulo de codigo 'normal' ==' esta macro agrega tres botones [81, 82 y 83] para afectar a las hojas Hoja82, Hoja83 y Hoja84 _
si no 'estas' en 'Hoja1'... cambia => Hoja:=ActiveSheet <= por => Hoja:=Worksheets("Hoja1") <= _
observa que el titulo del boton tiene un espacio ANTES de 'ponerle' el numero correspondiente al boton '
Sub AgregarVariosBotones()
Dim CeldasBoton As Variant, NumerosBoton As Variant, Sig As Integer
CeldasBoton = Array("b1", "d3", "f5:g6")
NumerosBoton = Array(81, 82, 83)
For Sig = LBound(CeldasBoton) To UBound(CeldasBoton)
Call AgregarBoton( _
Hoja:=ActiveSheet, _
Ubicacion:=CeldasBoton(Sig), _
Título:="Botón " & NumerosBoton(Sig), _
Macro:="AccionDeBotones")
Next
End Sub
' [esta seria] la macro que se asigna A TODOS los botones '
Private Sub AccionDeBotones()
Dim NumeroBoton As Integer
With ActiveSheet.Buttons(Application.Caller)
NumeroBoton = Val(Mid(.Caption, InStr(.Caption, " ") + 1))
End With
Worksheets("Hoja" & NumeroBoton + 1).Range("a1") = "DIA " & NumeroBoton
End Sub

Preguntas similares