gpt4 book ai didi

excel - 如何在vba代码中调用用户定义的函数

转载 作者:行者123 更新时间:2023-12-02 14:24:15 25 4
gpt4 key购买 nike

我在模块二中创建了一个名为“t_value”的公共(public)函数。我现在想在用户窗体的 VBA 代码中使用此函数,该函数使用用户窗体的输入。

这是函数:

Public Function t_value(theta As Variant)
Dim theta_1 As Integer, theta_2 As Integer
Dim A As Variant, B As Variant, s As Variant

theta_1 = Application.WorksheetFunction.Floor(theta, 5)
theta_2 = Application.WorksheetFunction.Ceiling(theta, 5)
A = theta - theta_1
B = theta_2 - theta_1
s = A / B
t_value = s

End Function

这是我想在以下位置使用上述函数的代码:

Private Sub Submit_Click()
Dim theta As Variant, alpha As Variant, t As Variant, u As Variant

theta = UserForm1.theta_input.Value
alpha = UserForm1.alpha_input.Value
t = Application.WorksheetFunction.t_value(theta)

End Sub

通常“Application.WorksheetFunction.[function]”有效,但在这种情况下它对我不起作用 - 我认为这可能是由于我创建了公式。将公式放入 Sub 中会更容易吗?我担心运行时间。我是个新手,所以我不太熟悉 VBA 语法。

最佳答案

Application.WorksheetFunction 是在 Excel 库中定义的类;您可以在对象浏览器 (F2) 中找到它:

object browser showing WorksheetFunction class

标准模块中的公共(public)函数只是一个可以从工作表单元格调用的函数(前提是它没有副作用),就像以及从工作簿的 VBA 项目中的任何位置:您无法编写任何“成为您所引用的库中定义的类的成员”的 VBA 代码。

因此,如果您在名为 Module1 的模块中有一个名为 MyFunction 的函数,则可以像这样调用它:

foo = MyFunction(args)

或者像这样:

foo = Module1.MyFunction(args)

所以在这种情况下:

t = t_value(theta)

Would it be easier to just put the formula into the Sub?

不会,因为 Sub 不会返回值(但是,您可以传递变量 ByRef):

Sub t_value(theta as variant, ByRef t as Variant)

Dim theta_1 As Integer, theta_2 As Integer
Dim A As Variant, B As Variant, s As Variant

theta_1 = Application.WorksheetFunction.Floor(theta, 5)
theta_2 = Application.WorksheetFunction.Ceiling(theta, 5)
A = theta - theta_1
B = theta_2 - theta_1
s = A / B
t = s '## Assign the value to the ByRef 't' variable and it should retain its value in the calling procedure
End Sub

您选择将此函数放入模块(Public)还是用户表单模块中是一个设计决策,取决于您是否希望该函数在表单实例之外普遍可用(s)。无论您选择将此函数设为sub,都有点不同——我可能会建议您不要这样做,遵循一般的最佳实践,即函数应该返回值,而子例程应该只是执行操作和/或操纵对象。

关于excel - 如何在vba代码中调用用户定义的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52018869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com