如何为excel工作簿创建参数化外接程序



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

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

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

插件是实现这一目标的最佳方式吗?或者有更好的方法来完成这项任务吗?

我很抱歉;还不能评论,因为我没有足够的声誉

两个参数将如何实现您的功能?我甚至不能让你的公式正确运行

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

=TrapezoidFunctionByCaseyHux(

然后将要求它们提供参数单元。

希望这对有帮助

要创建UDF(用户定义的函数),还可以通过ExcelDna框架。因此,您可以创建外接程序,并使用安装程序将其分发到您的组织中。

将包含此代码的.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文件添加到多个工作簿

最新更新