2012-06-22 71 views
7

我正在編寫一個VBA函數,我希望在同一文檔中的其他VBA模塊中公開提供,但是我不希望它可用作爲UDF(用戶定義的功能)。如何使VBA函數「VBA only」並將其禁用爲UDF

如果我使用公共訪問修飾符,但是我的函數也可以作爲可以從工作簿中的單元格調用的UDF公式。我不想要這個。

是否有訪問修飾符或其他方式可以幫助我獲得此「VBA only」行爲?

親切的問候

+1

您可以詳細瞭解此功能的用途嗎?這可能有助於建議使用僅VBA的VBA類的方法,並且不能從工作表中初始化。至少將預期的輸入參數顯示爲輸出值。 – ja72

+1

檢查函數中application.caller的類型名稱。沒有測試過這個,但我認爲它應該允許檢查一個函數是否正在從一個單元中調用。 –

回答

0

傳遞參數,只允許如果「魔術*值是給它的函數運行

示例 - 除非你知道這會給錯誤#NAME!什麼關鍵是:

Function VBAOnly(key As Long) 

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

VBAOnly = True 

End Function 
5

如果在Excel中使用這將返回一個#VALUE錯誤

。 10
+3

'xlErrName'會更好:) – Aprillion

+0

謝謝,但我希望有一種機制可以讓電子表格不可見。這種方式仍然是可見的(例如在autoComplete中),它只是返回一個錯誤。這不是我想到的100%。 – Skifozoa

+0

迪克的建議+1。 @Skifozoa根據KFleschner的評論,這是一個'私人功能' – brettdj

-1

使用Private修飾符應只允許在函數存在的模塊中執行。

+0

並非如此。 Cursory測試顯示可以從Excel訪問「Private」功能。 –

1

如果您在其中出現的函數,該函數可以聲明爲Public和任何使用的模塊中使用Option Private Module您的VBA項目中的其他模塊,但其他應用程序或項目(包括Excel本身)無法訪問它們。