Abrir una función desde un botón

05/08/2007 - 19:56 por LuisVF | Informe spam
¿Cómo puedo hacer un botón donde salga el asistente de una función para que
seleccione un rango?

Por ejejmplo, nompropio. Pulso el botón y sale el cuadro para que seleccione
una celda

Es que hice una función personalizada y quería poder "ejecutarla" desde un
botón.

Gracias por responder

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
05/08/2007 - 21:08 | Informe spam
hola, Luis !

Como puedo hacer un boton donde salga el asistente de una funcion para que seleccione un rango?
Por ejejmplo, nompropio. Pulso el boton y sale el cuadro para que seleccione una celda
Es que hice una funcion personalizada y queria poder "ejecutarla" desde un boton.



si lo que pretendes es que una funcion personalizada muestre 'ayuda' en el dialogo de 'pegar funcion'...
te paso algo de informacion al final del presente ;)

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

si quisieras dar algun tipo de 'soporte' al usuario para que 'sepa' lo que debe proporcionar a tus argumentos...

op1: [me parece que] la opcion mas 'barata' [por sencilla] pudiera ser...
a) dar a los argumentos [de tus funciones] nombres 'acordes' a su funcionamiento
[similares a los acostumbrados por las funciones incorporadas de la aplicacion]
y 'aprovechas' que los usuarios [normalmente] ya estan 'acostumbrados' a tales convencionalismos :))
b) 'cargar' con unos comentarios 'generales' a la funcion [no a cada argumento]
[aunque... solo estarian 'disponibles' si la funcion se ejecuta desde el asistente] :-(
-> te paso un ejemplo sencillo al final del presente ;)

op2: si [de todas formas] requieres de alternativas mas 'avanzadas'...
te paso [algo mas de] informacion al respecto al final del presente :)
_____
op1: ejemplo usando el metodo Application.MacroOptions... para una funcion personalizada:
el argumento 'Description' [que es el que] sirve para 'informar' al usuario +/- que hace [y algo de sus argumentos]...
-> tiene un limite de 255 caracteres :-(
-> tienes 'disponibles' [un maximo de] 4 lineas de texto :)
las 4 se muestran 'desde' que el usuario hace uso del asistente... en el primer dialogo [solamente]
una vez 'editando' los argumentos de la funcion [en el segundo dialogo] SOLO se muestran 2 lineas de texto :-((
[obviamente] el texto 'descriptivo' que estoy usando en el ejemplo 'excede' a los parametros necesarios ejemplificados ;)
y... la longitud del texto del ejemplo es ya de 245 carcteres [dispones de 10 mas, pero... con 11 -o mas-... FALLA] :-((
-> puedes especificar -ademas- a cual de las categorias de las funciones se integrara 'tu' funcion personalizada :))
= una funcion de ejemplo en un modulo de codigo 'normal' ==Function AF_Activo(ByVal Ref As Range) As Boolean
If Not Ref.Parent.AutoFilterMode Then Exit Function
Dim Filtro As Byte: Application.Volatile
With Ref.Parent.AutoFilter
If Intersect(Ref.Cells(1, 1), .Range) Is Nothing Then Exit Function
Filtro = Ref.Column - .Range.Column + 1: AF_Activo = .Filters(Filtro).On
End With
End Function
la 'carga' del texto 'inicial' de ayuda... en el modulo de codigo del libro [ThisWorkbook] ==Private Sub Workbook_Open()
Application.MacroOptions _
Macro:="AF_Activo", _
Description:="Devuelve Verdadero/Falso " & _
"si la referencia especificada tiene activados los AutoFiltros" & vbCr & _
"El argumento ""Ref"" DEBE SER una referencia de celda." & vbCr & _
"Otros argumentos segun sean requeridos." & vbCr & _
"Tercera y cuarta lineas de texto SOLO en el dialogo ""principal"".", _
Category:=9
End Sub
como informacion adicional... a partir de xl2000, estos son los numeros de cada categoria:
0 = Todas
1 = Financieras
2 = Fecha y Hora
3 = Matematicas y Trigonometricas
4 = Estadisticas
5 = Busqueda y Referencia
6 = Base de Datos
7 = Texto
8 = Logicas
9 = Informacion
10 = Comandos
11 = Personalizar
12 = Macro Control
13 = DDE / Externo
14 = Definidas por el Usuario
15 = Ingenieria
_____
op2: si quieres agregar 'descripciones' para los argumentos de la funcion [ademas de a la funcion]...
es necesario 'cargar' la funcion [y sus argumentos] en una libreria 'comun' [generalmente user(32).dll]
utilizando para ello otras funciones: REGISTER y UNREGISTER [para 'descargarla'], ademas de que...
-> esas funciones SOLO estan 'disponibles' a traves del metodo 'ExecuteExcel4Macro' del objeto Application
-> es necesario conocer [INDISPENSABLE para registrar] EXACTAMENTE el 'tipo' de datos [funcion y argumentos]
[despues 'entenderas mejor' este punto] :))
es un tema [escabroso por] 'dificil de explicar' [de manera 'sencilla'], mas no [imposible] de comprender.
de cualquier forma, [estoy seguro que son los mejores] los sitios donde encontraras informacion adecuada son:
1) en el sitio de John Walkenbach, en la seccion de Excel Expert E-Letter, Ejemplar #9 de fecha Julio 15, 1999
hay una seccion titulada: Power Programming Techniques created by Laurent Longre.
-> http://j-walk.com/ss/excel/eee/eee009.txt <- ['pasando' la mitad de la pagina]...
encontraras un ejemplo de [para 'empezar a entender'] su forma de uso.
2) en la pagina de su autor Laurent Longre [http://xcell05.free.fr/] encuentras informacion mas detallada
-> pulsa el boton de 'English page', revisa la seccion de 'funcustomize.dll' [libreria para personalizar funciones]
-> descarga/instala la libreria [y un XLA de ejemplo] en:
http://xcell05.free.fr/downloads/FunCustomize.zip

si [probablemente] quedaran dudas... comentas? o... comentas tu experiencia 'despues de...' ?
Respuesta Responder a este mensaje
#2 LuisVF
08/08/2007 - 22:03 | Informe spam
Disculpas por la tardanza pero hasta este fin de semana no tengo tiempo para
ver nada. El ejemplo pienso probarlo sin falta

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

Como puedo hacer un boton donde salga el asistente de una funcion para
que seleccione un rango?
Por ejejmplo, nompropio. Pulso el boton y sale el cuadro para que
seleccione una celda
Es que hice una funcion personalizada y queria poder "ejecutarla" desde
un boton.



si lo que pretendes es que una funcion personalizada muestre 'ayuda' en el
dialogo de 'pegar funcion'...
te paso algo de informacion al final del presente ;)

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

si quisieras dar algun tipo de 'soporte' al usuario para que 'sepa' lo que
debe proporcionar a tus argumentos...

op1: [me parece que] la opcion mas 'barata' [por sencilla] pudiera ser...
a) dar a los argumentos [de tus funciones] nombres 'acordes' a su
funcionamiento
[similares a los acostumbrados por las funciones incorporadas de la
aplicacion]
y 'aprovechas' que los usuarios [normalmente] ya estan
'acostumbrados' a tales convencionalismos :))
b) 'cargar' con unos comentarios 'generales' a la funcion [no a cada
argumento]
[aunque... solo estarian 'disponibles' si la funcion se ejecuta
desde el asistente] :-(
-> te paso un ejemplo sencillo al final del presente ;)

op2: si [de todas formas] requieres de alternativas mas 'avanzadas'...
te paso [algo mas de] informacion al respecto al final del presente :)
_____
op1: ejemplo usando el metodo Application.MacroOptions... para una funcion
personalizada:
el argumento 'Description' [que es el que] sirve para 'informar' al
usuario +/- que hace [y algo de sus argumentos]...
-> tiene un limite de 255 caracteres :-(
-> tienes 'disponibles' [un maximo de] 4 lineas de texto :)
las 4 se muestran 'desde' que el usuario hace uso del asistente... en
el primer dialogo [solamente]
una vez 'editando' los argumentos de la funcion [en el segundo dialogo]
SOLO se muestran 2 lineas de texto :-((
[obviamente] el texto 'descriptivo' que estoy usando en el ejemplo
'excede' a los parametros necesarios ejemplificados ;)
y... la longitud del texto del ejemplo es ya de 245 carcteres [dispones
de 10 mas, pero... con 11 -o mas-... FALLA] :-((
-> puedes especificar -ademas- a cual de las categorias de las funciones
se integrara 'tu' funcion personalizada :))
= una funcion de ejemplo en un modulo de codigo 'normal' ==> Function AF_Activo(ByVal Ref As Range) As Boolean
If Not Ref.Parent.AutoFilterMode Then Exit Function
Dim Filtro As Byte: Application.Volatile
With Ref.Parent.AutoFilter
If Intersect(Ref.Cells(1, 1), .Range) Is Nothing Then Exit Function
Filtro = Ref.Column - .Range.Column + 1: AF_Activo =
.Filters(Filtro).On
End With
End Function
la 'carga' del texto 'inicial' de ayuda... en el modulo de codigo del
libro [ThisWorkbook] ==> Private Sub Workbook_Open()
Application.MacroOptions _
Macro:="AF_Activo", _
Description:="Devuelve Verdadero/Falso " & _
"si la referencia especificada tiene activados los
AutoFiltros" & vbCr & _
"El argumento ""Ref"" DEBE SER una referencia de
celda." & vbCr & _
"Otros argumentos segun sean requeridos." & vbCr &
_
"Tercera y cuarta lineas de texto SOLO en el
dialogo ""principal"".", _
Category:=9
End Sub
como informacion adicional... a partir de xl2000, estos son los
numeros de cada categoria:
0 = Todas
1 = Financieras
2 = Fecha y Hora
3 = Matematicas y Trigonometricas
4 = Estadisticas
5 = Busqueda y Referencia
6 = Base de Datos
7 = Texto
8 = Logicas
9 = Informacion
10 = Comandos
11 = Personalizar
12 = Macro Control
13 = DDE / Externo
14 = Definidas por el Usuario
15 = Ingenieria
_____
op2: si quieres agregar 'descripciones' para los argumentos de la funcion
[ademas de a la funcion]...
es necesario 'cargar' la funcion [y sus argumentos] en una libreria
'comun' [generalmente user(32).dll]
utilizando para ello otras funciones: REGISTER y UNREGISTER [para
'descargarla'], ademas de que...
-> esas funciones SOLO estan 'disponibles' a traves del metodo
'ExecuteExcel4Macro' del objeto Application
-> es necesario conocer [INDISPENSABLE para registrar] EXACTAMENTE el
'tipo' de datos [funcion y argumentos]
[despues 'entenderas mejor' este punto] :))
es un tema [escabroso por] 'dificil de explicar' [de manera 'sencilla'],
mas no [imposible] de comprender.
de cualquier forma, [estoy seguro que son los mejores] los sitios donde
encontraras informacion adecuada son:
1) en el sitio de John Walkenbach, en la seccion de Excel Expert E-Letter,
Ejemplar #9 de fecha Julio 15, 1999
hay una seccion titulada: Power Programming Techniques created by
Laurent Longre.
-> http://j-walk.com/ss/excel/eee/eee009.txt <- ['pasando' la mitad de
la pagina]...
encontraras un ejemplo de [para 'empezar a entender'] su forma de uso.
2) en la pagina de su autor Laurent Longre [http://xcell05.free.fr/]
encuentras informacion mas detallada
-> pulsa el boton de 'English page', revisa la seccion de
'funcustomize.dll' [libreria para personalizar funciones]
-> descarga/instala la libreria [y un XLA de ejemplo] en:
http://xcell05.free.fr/downloads/FunCustomize.zip

si [probablemente] quedaran dudas... comentas? o... comentas tu
experiencia 'despues de...' ?

Respuesta Responder a este mensaje
#3 LuisVF
15/09/2007 - 01:08 | Informe spam
Private Sub Workbook_Open()
Application.MacroOptions _
Macro:="AF_Activo", _
Description:="Devuelve Verdadero/Falso " & _
"si la referencia especificada tiene activados los
AutoFiltros" & vbCr & _
"El argumento ""Ref"" DEBE SER una referencia de
celda." & vbCr & _
"Otros argumentos segun sean requeridos." & vbCr &
_
"Tercera y cuarta lineas de texto SOLO en el
dialogo ""principal"".", _
Category:=9
End Sub



Saludos Héctor

Probé esa opción, cargándola en personal.xls y me da un error:

Private Sub Workbook_Open()
Application.MacroOptions macro:="NIF", Description:="La descripción.",
Category:=9
End Sub
Respuesta Responder a este mensaje
#4 Héctor Miguel
15/09/2007 - 02:01 | Informe spam
hola, Luis !

[por si las dudas] la macro [NIF] debe estar de preferencia en un modulo general y NO debe ser *privada*

[de todas formas]... podrias comentar el texto del mensaje de error y que numero de error te indica ?

saludos,
hector.

_ la consulta original __
Probe esa opcion, cargandola en personal.xls y me da un error:

Private Sub Workbook_Open()
Application.MacroOptions macro:="NIF", Description:="La descripcion.", Category:=9
End Sub
Private Sub Workbook_Open()
Application.MacroOptions _
Macro:="AF_Activo", _
Description:="Devuelve Verdadero/Falso " & _
"si la referencia especificada tiene activados los AutoFiltros" & vbCr & _
"El argumento ""Ref"" DEBE SER una referencia de celda." & vbCr & _
"Otros argumentos segun sean requeridos." & vbCr & _
"Tercera y cuarta lineas de texto SOLO en el dialogo ""principal"".", _
Category:=9
End Sub
Respuesta Responder a este mensaje
#5 LuisVF
15/09/2007 - 04:17 | Informe spam
Saludos Héctor!!

El problema creo que es por estar en personal.xls y estar este libro oculto.
Cuando lo muestro, cierro y vuelvo a abrir ya no me da ningún problema. Pero
claro, prefiero que el libro esté oculto

el error es el siguiente:

Se ha producido el error '1004' en tiempo de ejecución:
Error en el método 'MacroOptions' de objeto '_Application'

La función (copiada de alguna página y un poco modificada) es:

Function NIF(dni As Long) As String
Dim letra As String
letra = Mid("TRWAGMYFPDXBNJZSQVHLCKE", (dni Mod 23) + 1, 1)
NIF = dni & letra
End Function

Está en un módulo estándar del libro personal.xls



Y ya puestos :)) la propiedad cell(1,1).Interior.ColorIndex sólo llega a 55?
Que número más raro. Es que intenté hacer un degradado con 255 celdas con
RGB(255,255,255-i) y me va a saltos. Excel no reconoce 16 millones de
colores para el fondo de una celda?



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

[por si las dudas] la macro [NIF] debe estar de preferencia en un modulo
general y NO debe ser *privada*

[de todas formas]... podrias comentar el texto del mensaje de error y que
numero de error te indica ?

saludos,
hector.

_ la consulta original __
Probe esa opcion, cargandola en personal.xls y me da un error:

Private Sub Workbook_Open()
Application.MacroOptions macro:="NIF", Description:="La descripcion.",
Category:=9
End Sub
Private Sub Workbook_Open()
Application.MacroOptions _
Macro:="AF_Activo", _
Description:="Devuelve Verdadero/Falso " & _
"si la referencia especificada tiene activados
los AutoFiltros" & vbCr & _
"El argumento ""Ref"" DEBE SER una referencia de
celda." & vbCr & _
"Otros argumentos segun sean requeridos." & vbCr
& _
"Tercera y cuarta lineas de texto SOLO en el
dialogo ""principal"".", _
Category:=9
End Sub






Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida