Forum Discussion
Adding new Excel Functions
- Aug 12, 2021
If the function is intended for use in a specific workbook, make sure that you create the code for the function in a standard module in that workbook. A standard module is the type of module that you create by selecting Insert > Module in the Visual Basic Editor.
It won't work if you create the code in the code module of a worksheet or in the ThisWorkbook module.
Make sure that you save the workbook as a macro-enabled workbook (*.xlsm or *.xlsb); if you save it as a .xlsx workbook, all VBA code will be lost.
If the function should be available in all open workbooks, you must create it in your personal macro workbook PERSONAL.XLSB. If you don't have this yet, you must create it by recording a macro in your Personal Macro Workbook:
After that, you can remove the dummy macro that you recorded, and create your own functions.
To refer to a function in your personal macro workbook in a formula, prefix it with PERSONAL.XLSB. For example:
=PERSONAL.XLSB!MyFunction()
or
=PERSONAL.XLSB!MyFunction(A1,A2)
When you quit Excel, it will prompt you to save changes in PERSONAL.XLSB. Answer Yes!
If the function is intended for use in a specific workbook, make sure that you create the code for the function in a standard module in that workbook. A standard module is the type of module that you create by selecting Insert > Module in the Visual Basic Editor.
It won't work if you create the code in the code module of a worksheet or in the ThisWorkbook module.
Make sure that you save the workbook as a macro-enabled workbook (*.xlsm or *.xlsb); if you save it as a .xlsx workbook, all VBA code will be lost.
If the function should be available in all open workbooks, you must create it in your personal macro workbook PERSONAL.XLSB. If you don't have this yet, you must create it by recording a macro in your Personal Macro Workbook:
After that, you can remove the dummy macro that you recorded, and create your own functions.
To refer to a function in your personal macro workbook in a formula, prefix it with PERSONAL.XLSB. For example:
=PERSONAL.XLSB!MyFunction()
or
=PERSONAL.XLSB!MyFunction(A1,A2)
When you quit Excel, it will prompt you to save changes in PERSONAL.XLSB. Answer Yes!
- Dicky_g141Aug 13, 2021Brass Contributor
Thank you Hans. That seems very helpful but I still seem to be missing something basic. I have entered the following in a module edit window, as you suggest:
Function Interpolate(lwr, upr, lwrval, uprval, x)
Interpolate = lwrval + (x - lwr) * (uprval - lwrval) / (upr - lwr)
End FunctionI have also tried adding "As single" to the first line and both variants compile successfully but neither seems to propagate into my worksheet, which refuses to admit to the existence of a function with the name Interpolate. What am I missing?
- Dicky_g141Aug 13, 2021Brass ContributorThanks again, Hans, but it appears that the only problem was with the name "INTERPOLATE". It didn't like the mixed-case version and appears to think that the uppercase version is already in use (although it doesn't appear in the all functions list). Renaming it "FOOBAR" seems to have fixed it.
- Dicky_g141Aug 15, 2021Brass ContributorFor anyone who is interested in this thread I have found that, by saving my macros in an Excel add-in file (.xalm extension) it propagates into all spreadsheets and the macros can just be used as is, that is without the MYMACRO! prefix.