Instalar función de uauario en excel

He hecho una macro para convertir un numero en letras en el edito VB de excel y lo que quiero hacer es instalarla como una función normal de excel para cualquier libro nuevo (solo consigo tenerla en el que la he creado o bien tengo que exportaar/importar)
Por otro lado intento partir la cadena en trozos para que la muestre en varias filas consecutivas cuando es muy grande pero cada vez que pongo algún objeto excel (worksheet, Range, ... ) no funciona.
Muchas gracias.

1 Respuesta

Respuesta
1
El modo apropiado para hacer lo que deseas es generar un archivo de complemento (.xla) a partir de aquél donde tengas tu rutina.
Elimina aquellas hojas que no fueran necesarias.
Si haces "Archivo" | "Propiedades" e ingresas una explicación en "Comentarios" esta aparecerá cuando vayas a seleccionar el complemento.
Guarda este archivo como backup del complemento.
Ahora, usa la opción Guardar como para grabar este archivo como un "complemento".
Cierra tu versión standard.
Con "Herramientas" | "Complementos" busca tu archivo xla y selecciónalo. Aparecerá en la lista de complementos. Simplemente faltará que lo marques y se cargará.
La próxima vez que abras MS Excel tendrás disponible la función para cualquier archivo.
Esta es la primera vez que tengo que explicar la generación de Add-ins (bueno, complementos) y no sé si fui muy claro.
De todos modos, el notable amigo Valedor ha incluido recientemente en su sitio personal una explicación -lejos- más gráfica que la mía sobre todo el tema de "Complementos" que, considero, te puede ser muy útil.
Puedes leerla en:
http://www.vbalym.netfirms.com/excel/exco1.html
----
Respecto a tu segunda pregunta, y siendo una *función*, considera que una fórmula o función ocupa una sola celda. No existe fórmula que al ingresarla se *divida* en varias celdas hacia abajo.
Lo que sí puedes hacer es modificar el modo de alineación de la celda para que muestre el texto en varias líneas dentro de la misma celda. Ingresa por "Formato" | "Celdas" y busca la solapa de "Alineación" y marca la casilla "Ajustar Texto".
Esta, desde luego, es la más simple, sólo que la celda modificará su altura de acuerdo al texto que devuelva la fórmula.
La alternativa es hacer que antes del resultado final de tu función, se intercalen "retornos de carro" cada "n" caracteres. Pero esto como verás es más rígido que el formato de la celda mencionado anteriormente, para producir exactamente lo mismo...
(Considera que la valoración que figura predeterminada
es 3/5. Tal vez quieras cambiarla...)
En caso contrario, puedes preguntarme nuevamente
Aclarando qué entendí mal o qué faltó.
Todo perfecto ! Una única cosita más, se podría automatizar lo de "ajustar texto" en la función, para que aquella celda que la use tenga ese formato por defecto.
Muchas gracias fenómeno.
Veamos. Un función efectúa cálculos, no comandos.
Te había sugerido que tu función -antes de resolver el resultado- intercalara caracteres de retorno de línea cada N caracteres.
Algo así como esto:
LargoTxT = Len(TextoLetra)
L_count = 1
Do While LargoTxT > ActiveCell.ColumnWidth
' aa = Mid(TextoLetra, 1, L_count * ActiveCell.ColumnWidth)
' bb = Mid(TextoLetra, ActiveCell.ColumnWidth + 1, Len(TextoLetra) - L_count * ActiveCell.ColumnWidth)
TextoLetra = Mid(TextoLetra, 1, Int(L_count * ActiveCell.ColumnWidth)) & Chr(10) & Mid(TextoLetra, Int(L_count * ActiveCell.ColumnWidth) + 1, Len(TextoLetra) - Int(L_count * ActiveCell.ColumnWidth))
LargoTxT = LargoTxT - L_count * ActiveCell.ColumnWidth
L_count = L_count + 1
Loop
Pero esto corta el texto en cualquier parte.
La función de ajuste de texto es más inteligente pues ajusta el texto considerando donde termina cada palabra.
Por lo tanto, considerando que una función no ejecuta comandos, me parece mejor agregar una macro que se autoejecute con el evento "Cambio", evaluando si la fórmula ingresada contiene tu función de conversión.
Así si su nombre fuese Num2txt (como una que tengo yo), vé a la hoja donde se vaya a ingresar la función (en el editor de visual basic) y copia este código en el panel de la derecha:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If InStr(1, UCase(Target.Formula), "NUM2TXT") > 0 Then Target.WrapText = True
End Sub
Ante cada cambio en tal hoja, esta macro evaluará si la celda modificada contiene anidadamente o directamente el nombre de tu función de conversión (reemplaza la que puse allí por la tuya propia). Si así fuese, dará la instrucción de Ajustar texto para tal celda.
Esta, me parece, es la mejor alternativa.
Espero que ahora sí haya satisfecho tu requerimiento.
Un abrazo!
Fernando

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas