2009-04-16 9 views
11

ich ein schwaches Gedächtnis haben Lage zu sein, VBA-Funktionen zu verwenden, wie dies zu berechnen Werte in Excel (als Zellformel):in Excel VBA Erstellen Sie eine Funktion benutzerdefinierte Arbeitsblatt

=MyCustomFunction(A3) 

dies getan werden kann?

EDIT:

Dies ist meine VBA-Funktion Unterschrift:

Public Function MyCustomFunction(str As String) As String 

Die Funktion sitzt im ThisWorkbook Modul. Wenn ich versuche, es wie oben gezeigt im Arbeitsblatt zu verwenden, erhalte ich den Fehler #NAME?.


Solution (Danke, codeape): Die Funktion ist nicht zugänglich, wenn es ThisWorkbook Modul definiert ist. Es muss sich um ein "richtiges" Modul handeln, das manuell zur Arbeitsmappe hinzugefügt wurde.

+0

Es ist erwähnenswert, dass neuere Versionen von Excel VBA deaktiviert haben, wenn Sie die Arbeitsmappe mit einer .xlsx-Erweiterung speichern. Sie müssen es mit einer .xlsm-Erweiterung speichern, damit VBA aktiviert wird. –

+0

Sie müssen wahrscheinlich auch die Arbeitsblattdatei speichern, wenn Sie dies nicht bereits getan haben. Dann könnte es das Schließen und Öffnen wieder tun. Möglicherweise müssen Sie Ihre Formel erneut anwenden, falls Sie sie geändert haben. – prot

Antwort

18

Ja kann es. Sie definieren einfach eine VBA-Funktion in einem Modul. Eine schöne Einführung mit Beispielen finden Sie unter http://www.vertex42.com/ExcelArticles/user-defined-functions.html.

Hier ist ein einfaches Beispiel:

  • Erstellen Sie eine neue Arbeitsmappe
  • Wechseln Sie in VBA-Ansicht (Alt-F11)
  • ein Modul einfügen: Einfügen | Modul
  • Modulinhalte:
 
Option Explicit 

Function MyCustomFunction(input) 
    MyCustomFunction = 42 + input 
End Function 
  • Wechseln Sie wieder zu Arbeitsblatt (Alt-F11), und geben Sie einige Werte:
 
A1: 2 
A2: =MyCustomFunction(A1) 
+1

Funktioniert nicht, darum frage ich - ich bekomme #NAME? – Tomalak

+3

Hm, scheint meine Wahl des Moduls falsch gewesen. Es darf nicht im ThisWorkbook-Modul sitzen, sondern in einem separaten. Vielen Dank. :) – Tomalak

+0

Ihre Funktionssignatur ist falsch. Verwenden Sie "untypisierte" Argumente und geben Sie Werte zurück. Ich erinnere mich nicht, was VBA tatsächlich tut, wenn Sie den Typ weglassen, es benutzt den Variant-Typ, schätze ich. – codeape

4

Die Worteingabe muss als zu ersetze Es ist ein grundlegendes Schlüsselwort. Versuchen Sie stattdessen num. Sie können auch weiter gehen, indem Sie einen Typ angeben, zB Variante.