VBA - 子(模块)内的调用函数

时间:2012-10-18 20:34:11

标签: excel vba

我在VBA中有以下功能:

Public Function lorh(custo As Integer)
If custo > 10.99 And custo <> 0 Then
    lorh = "1.4"
Else
    If custo < 11 And custo <> 0 Then
        lorh = "1.35"
    Else
        If custo <= 0 Or custo < 0 Then
            lorh = "Valor Inválido"
        End If
    End If
End If
End Function

现在我需要的是从一个sub或更好的宏开始调用这个函数,所以我可以将它与excel工具栏上的自定义按钮相关联。谁能指导我?

2 个答案:

答案 0 :(得分:3)

实际上,如果你在模块中有这个功能,你可以直接在工作表单元格中引用它,就像你使用Excel的公式一样。

=lorh(A1)

为了让您的代码从宏按钮运行,它必须是 Sub 而不是功能

我认为下面的代码会按你想要的方式运行,我删除了多余的部分以及Barranka。

Public Sub lorh()
    Dim lorh As String
    custo = ActiveCell.Value

    If custo > 10.99 Then
        lorh = "1.4"
    Else
        If custo > 0 Then
            lorh = "1.35"
        Else
            lorh = "Valor Inválido"
        End If
    End If

    ActiveCell.Value = lorh
End Sub

此宏将使用活动单元格值,就像在函数中使用 custo 参数一样。

答案 1 :(得分:1)

如果您需要在excel表中使用您的功能,您只需要在任何单元格中编写它,就像andrux所说。

如果你需要再次从sub中调用它,你只需要编写它:

public sub aSubprocedure()
    ' Any variables and other instructions go here
    var = lorh(input)
    ' Your code goes on
end sub

然后您可以将子程序分配给按钮。


您的代码的一些建议:

我建议你的功能如下“清理”:

Public Function lorh(custo As Integer)
    If custo > 10.99 And custo <> 0 Then
        lorh = "1.4"
    Else If custo < 11 And custo <> 0 Then
        lorh = "1.35"
    Else If custo <= 0 Then
        lorh = "Valor Inválido"
    End If
End Function

请注意,if custo <= 0 or custo < 0是多余的......您只需要custo<=0

希望这有助于你