Excel加载项

Excel加载项是Excel启动时可以加载的文件(通常带有.xla或.xlam扩展名)。该文件包含VBA代码,通常以新功能的形式向Excel添加其他功能。

加载项提供了一种出色的方式来增强Excel的功能,并且它们是分发自定义功能的理想工具。 Excel附带了各种加载项,可供您加载和开始使用,并且还提供许多第三方加载项。

本文向您展示如何使用Excel VBA编写自定义函数,以及如何将其保存并安装为加载项。自定义功能通常称为UDF(用户定义功能)。

编写用户定义的函数

加载项可以包含任意数量的UDF(用户定义的函数),并且您可以在以后添加更多,只需打开和编辑加载项文件即可。

步骤1:将代码模块添加到新工作簿

。启动Excel,或者如果已经打开Excel,则创建一个新的空工作簿。

。从“开发人员”选项卡中打开“ Visual Basic编辑器”,然后转到“开发人员”选项卡。

。单击Visual Basic(键:ALT + F11),它将打开Visual Basic编辑器。

。在Visual Basic编辑器中,在“项目资源管理器”面板中选择“ VBAProject”。这将选择空的工作簿。

如果项目浏览器不可见,请通过查看>项目浏览器将其打开。

。从插入菜单中选择模块。这将新的空代码模块添加到所选的工作簿。您还将看到该模块出现在Project Explorer面板中。

ArrowAddingModule

步骤2:输入用户定义功能的代码

在代码窗口中,键入Age User Defined Function的代码

ArrowAddingUDFCode

步骤3:测试功能

您可以立即试用该功能。切换到Excel,然后在空的工作簿(用于创建函数的代码模块的工作簿)中,向单元格中输入一个日期。在另一个单元格中,以与使用Excel内置函数之一相同的方式输入函数,例如=年龄(A1)

ArrowTestingFunction

只要打开其宿主工作簿(包含UDF代码模块的工作簿),所有打开的工作簿都可以使用UDF。但是,如果关闭宿主工作簿并尝试在其他工作簿中使用该功能,则会出现错误。另一个工作簿找不到该功能,因此#NAME吗?错误出现。

为了克服遇到的错误,应该在Excel加载项中声明UDF并将一个Excel加载项分配给Excel应用程序。

创建Excel加载项

将工作簿另存为加载项

现在,包含您的代码模块的工作簿必须另存为Excel加载项(.xla或.xlam)文件。

在Excel窗口中,转到“文件”>“保存”以打开“另存为”对话框。输入您的加载项文件的名称(通常的文件命名规则适用),然后使用“另存为类型:”选项将文件类型更改为Microsoft Excel加载项(.xla)或(.xlam)。

单击[确定]之前,请检查保存加载项文件的位置。

最后单击[确定]接受更改。您的加载项现在可以安装了,可以根据需要分发给其他用户。

ArrowSavingAddin

安装加载项

转到工具>加载项以打开“加载项”对话框。如果您将外接程序存储在默认位置,则会在可用的外接程序:窗口中看到其名称(如果您将外接程序存储在其他文件夹中,请使用[浏览]按钮进行查找)。

要安装外接程序,请在外接程序名称旁边的复选框中打勾,然后单击[确定]。

ArrowInstallingAddin

加载项安装完成后,其功能将在Excel中可用。在功能向导(粘贴功能工具)的“用户定义”部分中找到它们,或者像在任何内置函数中一样将它们键入到单元格中。加载项将保持安装状态,直到您返回到“加载项”对话框并通过从复选框中删除对勾来将其卸载。

进行添加UDF和对加载项的更改

您的外接程序文件可以包含所需的任意数量的模块和自定义功能。您可以随时添加它们。

如果安装了外接程序,您将在VB编辑器的“项目浏览器”面板中看到它。找到包含您的函数的模块,然后进行所需的任何添加和更改。如果未安装您的加载项,请找到该加载项文件并双击以在Excel中打开它。您将无法在Excel窗口中看到它,但它将显示在VB编辑器的项目资源管理器中。

记住要保存您的更改!通过VB编辑器窗口中的文件>保存来执行此操作。

请遵循以下代码

'Insert below code in Addin

Option Explicit



Function Age(DoB As Date)

'Gives a name to the function and declares that a single argument is needed, which must be a date.

'Checking whether Date of Birth is zero

If DoB = 0 Then

Age = "type the correct Date of Birth"

Else

'If Date of Birth is not zero, compare the current month value with the Date of Birth

Select Case Month(Date)

'If current month is before (i.e. less than) the month of date of birth,

'then they have not had their birthday, so their age is this year minus their birth year minus 1

Case Is < Month(DoB)

Age = (Year(Date) - Year(DoB)) - 1

'If current month is same as the month of date of birth

'we need to know whether or not they have had their birthday yet

Case Is = Month(DoB)

'If today date is equal to or past the day of their birthday,

'then they have had their birthday (or it is today)

'so their age is this year minus their birth year?

'otherwise their age is this year minus their birth year minus 1

If Day(Date) >= Day(DoB) Then

Age = Year(Date) - Year(DoB)

Else

Age = Year(Date) - Year(DoB) - 1

End If

'If today?s month is after (i.e. greater than) the month of the person?s date of birth,

'they have had their birthday, so their age is this year minus their birth year.

Case Is > Month(DoB)

Age = Year(Date) - Year(DoB)

'Close the CASE statement

End Select

'Close the IF statement

End If



'Close the Function

End Function

如果您喜欢此博客,请在Facebook和Facebook上与您的朋友分享。

我们希望收到您的来信,请让我们知道如何改善我们的工作并为您做得更好。写信给我们[email protected]