2009-04-16 22 views
11

mam słabą pamięć jest w stanie korzystać z funkcji VBA do obliczania wartości w programie Excel, jak to (jako wzoru komórkowej):utworzyć funkcję niestandardową arkusza w Excel VBA

=MyCustomFunction(A3) 

można to zrobić?

EDIT:

To jest moja funkcja VBA podpis:

Public Function MyCustomFunction(str As String) As String 

Funkcja siedzi w module ThisWorkbook. Jeśli spróbuję użyć go w arkuszu, jak pokazano powyżej, pojawia się błąd #NAME?.


Solution (Dzięki, codeape): Funkcja ta nie jest dostępna, gdy jest on zdefiniowany moduł ThisWorkbook. Musi to być "właściwy" moduł, który został dodany ręcznie do skoroszytu.

+0

Warto zauważyć, że nowsze wersje programu Excel mają wyłączone VBA po zapisaniu skoroszytu z rozszerzeniem .xlsx. Musisz go zapisać z rozszerzeniem .xlsm, aby VBA mógł być włączony. –

+0

Prawdopodobnie musisz również zapisać plik arkusza roboczego, jeśli jeszcze tego nie zrobiłeś. Zamknięcie i ponowne otwarcie może to zrobić. Ponownie, być może trzeba będzie ponownie zastosować formułę na wypadek, gdyby została ona zmieniona. – prot

Odpowiedz

18

Tak, może. Po prostu definiujesz funkcję VBA w module. Zobacz http://www.vertex42.com/ExcelArticles/user-defined-functions.html dla miłego wprowadzenia z przykładami.

Oto prosty przykład:

  • Utwórz nowy skoroszyt
  • Przełącz do widoku VBA (Alt-F11)
  • Włóż moduł: Wstaw | Moduł
  • Moduł zawiera:
 
Option Explicit 

Function MyCustomFunction(input) 
    MyCustomFunction = 42 + input 
End Function 
  • powrócić do arkusza (Alt-F11) i wprowadzić niektóre wartości:
wejście
 
A1: 2 
A2: =MyCustomFunction(A1) 
+1

Nie działa, dlatego pytam - otrzymuję #NAME? – Tomalak

+3

Hm, wydaje się, że mój wybór modułu był nieprawidłowy. Nie może siedzieć w module ThisWorkbook, ale w oddzielnym. Dzięki. :) – Tomalak

+0

Twój podpis funkcji jest nieprawidłowy. Użyj argumentów "untyped" i zwróć wartości. Nie pamiętam, co właściwie robi VBA, kiedy pomijasz typ, domyślnie używa on wariantu Wariant. – codeape

4

Słowo musi zostać wymieniona jako to podstawowe słowo kluczowe. Zamiast tego użyj num. Możesz także pójść dalej, określając typ, np. Wariant.

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