2009-04-16 15 views
11

Tengo un vago recuerdo de ser capaz de utilizar las funciones de VBA para calcular los valores en Excel, así (como la fórmula de celda):Crear una función de hoja personalizada en Excel VBA

=MyCustomFunction(A3) 

Puede hacerse esto?

EDIT:

Ésta es mi función de VBA firma:

Public Function MyCustomFunction(str As String) As String 

La función se encuentra en el módulo ThisWorkbook. Si trato de usarlo en la hoja de trabajo como se muestra arriba, aparece el error #NAME?.


Solución (Gracias, codeape): La función no es accesible cuando se define ThisWorkbook módulo. Debe estar en un módulo "adecuado", que se haya agregado manualmente al libro de trabajo.

+0

Vale la pena señalar que las versiones más recientes de Excel tienen VBA deshabilitado si guarda el libro con una extensión .xlsx. Debe guardarlo con una extensión .xlsm para que se habilite VBA. –

+0

Probablemente también necesite guardar el archivo de la hoja de trabajo si aún no lo hizo. Luego, cerrarlo y abrirlo de nuevo podría hacer la cosa. Una vez más, es posible que deba volver a aplicar su fórmula en caso de que la haya cambiado. – prot

Respuesta

18

Sí, puede. Simplemente define una función VBA en un módulo. Vea http://www.vertex42.com/ExcelArticles/user-defined-functions.html para una introducción agradable con ejemplos.

Aquí está un ejemplo sencillo:

  • Crear un nuevo libro
  • Cambiar a vista de VBA (Alt-F11)
  • insertar un módulo: Insertar | Módulo
  • contenido del módulo:
 
Option Explicit 

Function MyCustomFunction(input) 
    MyCustomFunction = 42 + input 
End Function 
  • volver a la hoja de trabajo (Alt-F11), e introducir algunos valores:
entrada
 
A1: 2 
A2: =MyCustomFunction(A1) 
+1

No funciona, es por eso que pregunto: ¿obtengo #NAME? – Tomalak

+3

Hm, parece que mi elección de módulo fue incorrecta. No debe sentarse en el módulo ThisWorkbook, sino en uno aparte. Gracias. :) – Tomalak

+0

La firma de su función es incorrecta. Use argumentos "sin tipo" y devuelva valores. No recuerdo lo que realmente hace VBA cuando dejas fuera el tipo, usa el tipo de Variant, supongo. – codeape

4

La palabra tiene que ser reemplazada, ya es una palabra clave básica. Pruebe num en su lugar. También puede ir más allá al especificar un tipo, por ejemplo, variante.

Function MyCustomFunction(num As Variant) 
    MyCustomFunction = 42 + num 
End Function 
Cuestiones relacionadas