簡體   English   中英

如何在工作表(不是工作簿)中存儲和使用 VBA 函數

[英]How to store and use a VBA Function within a worksheet (not workbook)

我一直在尋找這個問題的答案,但似乎不走運。

我有一個自定義函數,我希望將其存儲在單個工作表中,以便該函數可以與工作表(即不是工作簿)一起分發

需要從excel單元格公式調用自定義函數

當存儲在代碼模塊中時調用該函數可以正常工作,但是將其移動到工作表對象“模塊”中會導致它失敗。 這或許是意料之中的。

想要將函數放置在工作表代碼中的原因是,它會通過模板文件夾與工作表一起自動導入到新工作簿,然后可供工作簿的其余部分使用。 (這是通過插入>新工作表對話框導入的

所以我的問題是 2 倍,要么:

當函數寫在工作表代碼中時,如何從 Excel 公式調用函數,或者...

當我從模板文件添加工作表時,如何自動將模塊添加到新工作簿?

值得注意的是,使用personal.xlsb 文件對此不起作用,我需要能夠從工作表公式中調用該函數

提前致謝

您可以將以下內容添加到工作簿正在導入的工作簿的ThisWorkbook事件中,根據需要進行調整。 我在 Sheet1 中有一個工作表函數,名為ns它需要兩個參數ab ,我希望使用的 Excel 中的函數是MY_FUNCTION

這將添加一個模塊來保存工作表函數的包裝器。

Private Sub Workbook_NewSheet(ByVal Sh As Object)

Dim vbp As VBProject
Dim vbm As VBComponent

Set vbp = Application.VBE.ActiveVBProject

Set vbm = vbp.VBComponents.Add(vbext_ct_StdModule)
vbm.Name = "MY_FUNCTION_MDL"

'   vbm.CodeModule.AddFromFile ""       '   <--- another way add from file

vbm.CodeModule.InsertLines 1, "Public Function MY_FUNCTION(a,b)"
vbm.CodeModule.InsertLines 2, "     MY_FUNCTION=sheet1.ns(a,b)"
vbm.CodeModule.InsertLines 3, "End Function"

End Sub

你可以這樣做(它對我有用):

Option Explicit

Private Sub Workbook_Open()

   ThisWorkbook.VBProject.VBComponents.Import "[PathtoDir]\MyMod.bas"

End Sub

確保在excel中執行以下操作:

安全

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM