Jump to content

asignar macros a botones


Recommended Posts

Hola, tengo un libro excel con varias hojas y quiero hacerlo atractivo. Quiero empezar por cambiar los botones sosos creados con vba, para eso estoy creando auto formas atractivas, mi problema viene al darle la orden a esa auto forma para que ejecute por ejemplo un formulario creado con VBA, pues le doy a asignar macro pero ya no se como continuar. si por ejemplo el botón que actualmente tiene esa misión tiene este código:

Private Sub CommandButton1_Click()

UserForm18.Show

Worksheets("formulario").Select

End Sub

¿Que deberia escribir en "asignar macro" de la auto forma creada para que funcione y pueda abrir el userform18?

Gracias.

Link to comment
Share on other sites

.

Si usas autoformas o imágene como puntos de menú, selecciona el objeto, click derecho\Asignar macro y selecciona una macro de la lista de macros.

Usando tu ejemplo, pon en un módulo normal:

[COLOR=#333333]Sub VerUserform18()[/COLOR]
[COLOR=#333333]UserForm18.Show[/COLOR]
[COLOR=#333333]End Sub[/COLOR][/CODE]

[color=#333333]

Y ya tienes una macro para asignar al objeto que quieras.

.[/color]

Link to comment
Share on other sites

me dice que la formula es demasiado compleja para asignarla a un objeto.

- - - - - Mensaje combinado - - - - -

Pues eso, inserto un modulo normal, le pongo este codigo

Sub VerUserform18()

UserForm18.Show

End Sub

abro el objeto, selecciono asignar macro, pico a

VerUserform18

pero el userform no se abre

- - - - - Mensaje combinado - - - - -

Bien!!! Despues de abrir el archivo de nuevo y volverlo a hacer, ahora ya funciona. Hahora ya tengo faena para diseñar un monton de botones. Supongo que a cada autoforma hay que añadir un modulo.

Saludos y cerrando pregunta.

- - - - - Mensaje combinado - - - - -

Gracias por tu enseñanza, ya voy controlando la manera de hacer auto formas y ponerles codigos en modulos simples, pero solo cuando se trata de botones que abren userform o formularios, pero ¿que pasa cuando se trata de botones que no abren nada de eso sino que procesan directamente?

Por ejemplo¿Que codigo deberia escribir en un modulo simple para ordenarle a la autoforma que procese el codigo del boton?

Private Sub CommandButton9_Click()

Sheets("FORMULARIO").Unprotect Password:="272727"

Sheets("ENMARCADOR").Unprotect Password:="272727"

Sheets("IVA TRIMESTRE").Unprotect Password:="272727"

Dim rutaarchivo As String

Dim rutaarchivo1 As String

If Range("B12") = 1 Then

rutaarchivo = "C:\calculartmr\FACTURAS\" & [c30] & " " & Day(Date) & "-" & Month(Date) & "-" & Year(Date) & ".Pdf"

Sheets("enmarcador").Activate

Sheets("enmarcador").Range("$d$1733:$q$1787").Select

Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _

rutaarchivo, Quality:=xlQualityStandard, _

IncludeDocProperties:=True _

, IgnorePrintAreas:=False, OpenAfterPublish:=False

Sheets("formulario").Range("c29").Value = Sheets("formulario").Range("c29") + 1

Sheets("formulario").Activate

MsgBox "guardado correctamente en " & rutaarchivo

Call CommandButton31_Click

End If

If Range("B12") = 3 Then

rutaarchivo1 = "C:\calculartmr\PRESUPUESTOS\" & [c30] & " " & Day(Date) & "-" & Month(Date) & "-" & Year(Date) & ".Pdf"

Sheets("enmarcador").Activate

Sheets("enmarcador").Range("$d$1733:$q$1787").Select

Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _

rutaarchivo1, Quality:=xlQualityStandard, _

IncludeDocProperties:=True _

, IgnorePrintAreas:=False, OpenAfterPublish:=False

Sheets("formulario").Activate

MsgBox "archivo guardado correctamente en ruta " & rutaarchivo1

Call CommandButton31_Click

End If

ThisWorkbook.Save

If Range("c27") = "FACTURA" Then

With Worksheets("IVA TRIMESTRE")

fila = .Range("a1:a65500").Find("").Row

.Cells(fila, 1) = Range("c28")

.Cells(fila, 2) = Range("c29")

.Cells(fila, 3) = Range("c30")

.Cells(fila, 4) = Range("c34")

.Cells(fila, 5) = Range("s41")

.Cells(fila, 6) = Range("s42")

.Cells(fila, 7) = Range("r43")

End With

End If

Dim objeto As Object, UserForm As UserForm

For Each UserForm In VBA.UserForms

For Each objeto In UserForm.Controls

Select Case TypeName(objeto)

Case "TextBox"

objeto = ""

Case "ComboBox"

objeto.ListIndex = -1

End Select

Next objeto

Next UserForm

Sheets("FORMULARIO").Protect Password:="272727"

Sheets("ENMARCADOR").Protect Password:="272727"

Sheets("FORMULARIO").Activate

Sheets("FORMULARIO").Protect Password:="272727"

Sheets("ENMARCADOR").Protect Password:="272727"

Sheets("IVA TRIMESTRE").Protect Password:="272727"

End Sub

Link to comment
Share on other sites

No tienes que para cada autoforma crear un modulo.

Si es para abrir 20, 30 o mas formularios, puedes dar nombre al modulo Open y en mismo modulo Open crrear la apertura para cada form.

Hay macros que pueden ser creadas en el mismo Modulo si eso lleva a una funcion, un ejercicio o cosa similar, ahora; si es bueno crear un modulo para cada macro de cada formulario y dar nombre entendible a ese Modulo.

Para el Modulo de nombre Open:

Sub Form1()

Formulario1.show

End Sub

Sub Form2()

Formulario2.show

End Sub

Lo que si es que NUNCA pongas la macro con nombre igual al del formulario, Ejemplo

Sub Formulario1()

Formulario1.show

End Sub

te daria error y no abre el formulario

Por eso te doy el ejemplo arriba con nombre diferente

Link to comment
Share on other sites

Entendido. Lo estoy llevando a la practica con las dos maneras de hacerlo, aparentemente funcionan igual de bien, El problema lo tengo cuando el botón no abre algo si no que ejecuta como el del ejemplo de arriba... ¿He de introducir toda la macro en un modulo simple? Yo pensé que funcionaria con una clave parecida a esto:

Sub Form25()

CommandButton9.show

End Sub

Aunque como es obvio no funciona. ¿Se le puede poner al modulo para que haga funcionar el botón ya creado con vba?

Link to comment
Share on other sites

Para que una macro pueda ser asignada a una autoforma debe estar en un módulo, ser publica y no tener parámetros, si no es así, no aparece en la lista de macros disponibles.

Esta macro no puede ser asignada a ningún objeto porqué está definida como privada:

Private Sub MiMacro()

'Aquí el código que quieras

End Sub

Esta macro si puede ser asignada a un objeto porqué está definida como publica:

Public Sub MiMacro()

'Aquí el código que quieras

End Sub

Public puede omitirse ya que se asume

Link to comment
Share on other sites

la propiedad "show" aplica solo para los userform, para activar o desactivar un commandButton debes usar la propiedad;

commandbutton9.enabled=true (activar)

commandbutton9.enabled=false (desactivar)

Para poner visible o no un commandbutton;

commandbutton9.visible=true (activar)

commandbutton9.visible=false (desactivar)

Saludos

Link to comment
Share on other sites

Bien, despues de aprender a hacer funcionar un formulario desde una auto forma ya he entendido y aprendido a hacer funcionar un botón desde su auto forma, simplemente he introducido el código de ese botón en un modulo normal, cambiando eso si en el código del botón la propiedad de:

Private Sub CommandButton6_Click()

por:

Public Sub CommandButton6_Click()

Y funciona perfecto, Eso sí sobre un botón que lleva un código sencillo como es la misión de borrar celdas.

El problema me lo da el botón descrito anteriormente, como dije mas complejo, que hace funcionar otro botón. Me explico, cuando introduzco todo el código en un modulo normal, cambio el Private Sub por el Public Sub, le asigno a la autoforma la macro del famoso boton 9, me da un error y me señala en amarillo una linea del codigo que es esta:

Call CommandButton31_Click

y de aquí no salgo. La verdad es que es el último botón que quiero hacer que funcione por una autoforma, pero se me resiste.

Tampoco doy con lo que tengo que poner en el modulo normal de la auto forma, para no tener que introducir la clave del boton en ella, pues parece que sea incompatible.

Necesito una ayuda final.

Link to comment
Share on other sites

Vamos a ver, hemos llegado a un punto en que esto se está convirtiendo en un dialogo para besugos.

La extensión de una macro no tiene nada que ver con que se pueda ejecutar o no desde una autoforma, un control de formulario de hoja, una imagen, un control activex, un gráfico o cualquier otra cosa que se te ocurra usar para llamarla.

Sube el archivo especificando que es lo que quieres y a ver si acabamos con el culebrón.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

Privacy Policy