![](/img/trans.png)
[英]UDF (user-defined function) to identify the format pattern for an Excel cell
[英]Add user-defined function (UDF) to built-in category in Excel
當我向Excel中的標准代碼模塊添加公共函數時,它將顯示在“全部”類別“用戶定義”的“插入函數”向導中。
有沒有辦法:
我只需要能夠使上述案例中的一個起作用,但我很想知道每個案例是否可行。
注意:如果社區認為更合適,我很樂意將此分為三個單獨的問題。 我想可能只有一個答案,三個問題之間只有輕微的變化。
有沒有辦法[...]保持函數公開(所以它可以從其他模塊調用)但是從Excel函數向導中隱藏它?
將Option Private Module
放在Option Private Module
的頂部。 完成。
http://msdn.microsoft.com/en-us/library/aa266185(v=vs.60).aspx
Application.MacroOptions
是您追求的命令
此示例將名為TestMacro的用戶定義宏添加到名為My Custom Category的自定義類別中 。
Function TestMacro()
MsgBox ActiveWorkbook.Name
End Function
Sub AddUDFToCustomCategory()
Application.MacroOptions Macro:="TestMacro", Category:="My Custom Category"
End Sub
我在文章中回答了關於VBA日期函數的問題 :這里是我在那里寫的內容的直接復制和粘貼,使用VB'Attribute'語句來創建函數描述和函數向導類別ID :
仍然使用Excel 2003的人的提示:
如果您(或您的用戶)要從工作表調用IsDateEx(),請將這兩行放在函數頭的正下方,使用導出的.bas文件中的文本編輯器並重新導入該文件,因為VB屬性很有用,但Excel的VBA IDE中的代碼編輯器無法訪問它們:
Attribute IsDateEx.VB_Description = "Returns TRUE if TestDate is a date, and is within ± 20 years of the system date.\\r\\nChange the defaulte default ± 20 years boundaries by setting values for LimitPastDays and LimitFutureDays\\r\\nIf you are checking an array of dates, ALL the values will be tested: set FirstColumnOnly TRUE to check the leftmost column only."
這就是一行:注意瀏覽器插入的換行符! ...這一行,它將isDateEX放入'信息'類別的函數向導中,與ISNUMBER(),ISERR(),ISTEXT()等一起:
Attribute IsDateEx.VB_ProcData.VB_Invoke_Func = "w\\n9"
如果您希望在日期和時間功能下看到它,請使用“w \\ n2”:在您自己的代碼中使用“使用過的定義”函數的失敗中丟失它,以及由人們開發的所有第三方加載項誰做得不夠,不能幫助偶爾的用戶。
我不知道這是否仍然適用於Office 2010。
......這就是我所能提出的。 VBA開發人員無法真正訪問函數向導類別和關聯的函數(和參數!)描述符。 其中一些可供老派VB編碼人員使用,他們可以在IDE中訪問VB.Attribute語句; 你可以通過一些文本文件操作將它分類到你的代碼中。
公共函數僅對Excel的公式欄可見,它們位於“常規”* .bas模塊中。 屬於類的公共函數對公式欄不可見。 如果將這一點與我們可以模擬靜態類的事實相加,則可以有效地隱藏函數。
如果您創建一個類模塊然后將其導出,您將在標題中找到Attribute VB_PredeclaredId = False
。 將此設置為true會創建該類的默認全局實例,該實例可以像更現代語言中的靜態類一樣使用。
例如,創建一個名為Math
的新類模塊並將此函數添加到其中。
Public Function Add(a As Integer, b As Integer) As Long
Add = a + b
End Function
導出並刪除文件,然后在記事本中打開它。 將預先聲明的Id更改為true。
VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
END
Attribute VB_Name = "Math"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
保存並將文件導回到項目中。
現在,在常規模塊中,您可以使用合格的調用來調用該函數。 就像任何其他類方法一樣。 只有現在,我們有一個要使用的類的默認實例。 New
或Set
沒有任何問題,它只是有效。
Sub Test()
Debug.Print Math.Add(1,2)
End Test
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.