如何为excel工作簿创建参数化加载项

时间:2016-07-19 02:25:21

标签: excel vba excel-vba macros add-in

我需要创建一个excel加载项,它接受两个数据集的上限和下限的参数。我目前有一个函数编写,使用硬编码的梯形规则执行正确的积分计算,范围的下限为4,上限为13。

(=SUMPRODUCT(A5:A13-A4:A12;(B5:B13+B4:B12)/2)

我需要创建一个独立的(可能是加载项)文件,可以导入到任何excel文件中并接受两个参数(上限和下限代替4和13)以尽可能简单地完成此功能。

加载项是解决此问题的最佳方式还是有更好的方法来完成此任务?

3 个答案:

答案 0 :(得分:2)

道歉;我还没有评论,因为我没有足够的声誉

两个参数如何实现您的功能?我甚至无法让你的公式正常运行?

那就是说,你只需要将你的计算放在VBA中的一个函数中,确保它成为public函数,然后保存该模块,将其导出并交给需要使用的人。它。他们需要将模块导入到VBA中,但之后他们只需要从公式栏中调用它,输入正常的工作表函数,如:

=TrapezoidFunctionByCaseyHux(

然后他们将被要求提供参数单元格。

希望这会有所帮助

答案 1 :(得分:0)

要创建UDF(用户定义的函数),您也可以使用.Net ExcelDna framework。 因此,您可以使用安装程序创建加载项并将其分发到组织中。

答案 2 :(得分:0)

将带有此代码的.bas文件导入到Excel工作表的Visual Basic编辑器中

Option Explicit

Function Trapezoid(KnownXs As Variant, KnownYs As Variant) As Variant

    Dim i As Integer

    If Not TypeName(KnownXs) = "Range" Then
        Trapezoid = "X range is not valid"
        Exit Function
    End If

    If Not TypeName(KnownYs) = "Range" Then
        Trapezoid = "Y range is not valid"
        Exit Function
    End If

    If KnownXs.Rows.Count <> KnownYs.Rows.Count Then
        Trapezoid = "Number of Xs <> Number of Ys"
        Exit Function
    End If

    Trapezoid = 0


    For i = 1 To KnownXs.Rows.Count - 1
        Trapezoid = Trapezoid + Abs(0.5 * (KnownXs.Cells(i + 1, 1) _
        - KnownXs.Cells(i, 1)) * (KnownYs.Cells(i, 1) + KnownYs.Cells(i + 1, 1)))
    Next i

End Function

然后,您可以将您的选择用作参数,并将.bas文件添加到多个工作簿