Aunar funciones en Microsoft Excel para no ejecutarlas independientemente. Macros

Hoy nuevamente recurro a usted para preguntarte lo siguiente:
Tengo ésta función
Function Codigo(C)
If C = 1105 then
Codigo = "Caja"
elseif C = 1110 then
Codigo = "Bancos"
Así sucesivamente. El caso es que en el modulo no cabe toda la función, ésta no se ejecuta y sale un mensaje que dice "copilación demasiado larga"
entonces dividí la funcion en dos para poder introducir los codigas necesarios.
¿Cómo hago para unir estas funciones en una y no tener que ejecutarlas independientemente? He probado lo siguiente y no me funciona, solo me funciona cuando la orden es ejecutar una macro, o si estoy en una macro solo se ejecuta una función pero nunca una macro a continuación de una macro o una función a continuacipon de una función:
Function Codigo(C)
If C = 1105 then
Codigo = "Caja"
else
ActiveCell.FormulaR1C1 = "=Codigo1(RC[-1])"
Lo que yo quiero es que si el código que escribo no esta en la función función "Codigo" entonces ejecute la función "Codigo1".

1 Respuesta

Respuesta
1
El uso de una función definida por usuario debería restringirse a aquellas que indefectiblemente no fueron resueltas internamente por MS Excel en sus paquede de funciones que, de hecho, es bastante grande.
Lo que pretendes hacer, se parece mucho a la función interna de BUSCAR o BUSCARV.
En ella, en lugar de escribir las relaciones de código, nombre de cuenta en el panel de Visual Basic, armas (en la hoja) una tabla de dos columnas donde la primera es el código y la segunda es el nombre de cuenta.
En la celda donde quieres que se muestre el nombre de una cuenta, usas una fórmula como esta:
=BUSCAR(C4,$F$9:$G$200)
Donde:
- C4 es la celda que contiene el número a buscar
- $F$9:$G$200 es el rango donde armaste la tabla de relación o plan de cuentas.
(Los símbolos $ sirven para dejar fijo el rango aún copiando la fórmula a otra celda).
---
Ahora bien, puede ser que por alguna razón te parezca más práctico armar tu propia función. Esn este caso, no uses CÓDIGO como referencia a tu función, ya que este existe como función propia de MS Excel y esto te generará conflicto.
Esta función "funciona":
Function miCodigo(C)
If C = 1105 Then
miCodigo = "Caja"
ElseIf C = 1110 Then
miCodigo = "Bancos"
End If
End Function
Además si las opciones son varias, usa SELECT CASE en lugar de IF...ELSEIF...
Sería:
Function OtroCodigo(ByVal C As Long) As String
Select Case C
Case 1105
OtroCodigo = "Caja"
Case 1110
OtroCodigo = "Bancos"
Case 1115
OtroCodigo = "Deudores por ventas"
'...
Case Else
OtroCodigo = "NO definido"
End Select
End Function
Con esto evitarías "partir" la función.
Entiendo que es preferible invertir tiempo en aprender las funciones propias de MS Excel (que suelen resolver el 99% de los problemas habituales), pero tómalo solo como una expeeriencia personal.
Un abrazo!
Fernando
Gracias fernando. Me perace muy importante que comentes las partes claves de una función o una macro, en ocasiones hago las cosas pero no exactamente como funcionan.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas