繁体   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