2012-06-22 10 views
7

Piszę funkcję VBA, którą chcę publicznie udostępnić w innych modułach VBA w tym samym dokumencie, jednak nie chcę, aby była dostępna jako UDF (funkcja zdefiniowana przez użytkownika).Jak ustawić funkcję VBA "tylko VBA" i wyłączyć ją jako UDF

Jeśli korzystam z modyfikatora dostępu publicznego, jednak moja funkcja jest również dostępna jako formuła UDF, którą można wywołać z komórek w skoroszycie. Nie chcę tego.

Czy istnieje modyfikator dostępu lub inny sposób, który może pomóc mi uzyskać to zachowanie "tylko VBA"?

poważaniem

+1

Czy możesz bardziej szczegółowo zrozumieć, co robi ta funkcja? Może to pomóc w sugerowaniu sposobów używania klas VBA, które są tylko VBA, i nie można ich zainicjować z arkusza roboczego. Przynajmniej pokaż oczekiwane argumenty wejściowe jako wartości wyjściowe. – ja72

+1

Sprawdź nazwę typu application.caller w ramach funkcji. Nie testowałem tego, ale myślę, że powinno to umożliwić sprawdzenie, czy funkcja jest wywoływana z komórki. –

Odpowiedz

0

przekazać parametr, który pozwala jedynie funkcja uruchomić czy „magiczne * wartość podana jest na nim

przykład -. To daje błąd #NAME! chyba wiesz, co klucz jest:

Function VBAOnly(key As Long) 

If key <> 12345 Then 
    VBAOnly = CVErr(xlErrName) 
    Exit Function 
End If 

VBAOnly = True 

End Function 
5

to zwróci błąd #VALUE jeżeli są stosowane w Excelu

. 10
+3

'xlErrName' będzie lepiej :) – Aprillion

+0

Dzięki, ale miałem nadzieję, że istnieć będzie mechanizm, który sprawi, że funkcja będzie niewidoczna dla arkusza kalkulacyjnego. W ten sposób funkcja jest nadal widoczna (np. W autouzupełnianiu), po prostu zwraca błąd. To nie jest w 100% to, co miałem na myśli. – Skifozoa

+0

+1 na sugestię Dicka. @Skifozoa zgodnie z komentarzem KFleschnera sprawiają, że jest to 'funkcja prywatna' – brettdj

-1

Korzystanie modyfikator Private powinno pozwolić jedynie na wykonanie w module funkcja istnieje w.

+0

Nie tak. Testy Cursory pokazują, że funkcje "Prywatne" są dostępne z Excela. –

1

Jeśli używasz Option Private Module w module, w którym pojawia się funkcja, funkcja ta może być uznana jako Public i wykorzystywane w żadnym z inne moduły w ramach projektu VBA, ale nie będą dostępne dla innych aplikacji lub projektów, w tym samego programu Excel.