如何从带按钮的按钮调用功能

时间:2017-01-15 04:02:41

标签: excel vba excel-vba excel-2010

我对Excel很陌生并且非常困惑,所以请原谅任何基本问题。我有一个完美的自定义VBA功能:

Public Function MissingSequence(Rng As Range) As String

Dim iCnt As Integer
65        'ASCI character for "A"

    Dim iNum As Integer
    For iNum = 100 To 110

        Dim sCheck As String
        sCheck = Chr(iCnt) & iNum

        If Rng.Find(sCheck, lookat:=xlWhole) Is Nothing Then

            Dim sMissingNumbers As String
            sMissingNumbers = sMissingNumbers & "," & sCheck

        End If

    Next

MissingSequence = Mid(sMissingNumbers, 2)

End Function

我目前正在使用=MissingSequence(D4:D10)在单元格内调用此函数。但是,我想将此函数调用移动到一个按钮。

当我使用以下代码创建命令按钮时:

Public Sub CommandButton1_Click()

MissingSequence(D4:D10)

End Sub

...然后按下按钮,没有任何反应。在VBA中调试时,我收到语法错误

当我试试这个......

Public Sub CommandButton1_Click(D4:D10)

MissingSequence

End Sub

...再次单击按钮,没有任何反应。调试时,我收到错误 预期:列表分隔符或)

我现在完全不知道如何使用按钮让这个功能正常工作,感觉我已经尝试了一切,所以我真的很感激一些帮助。

1 个答案:

答案 0 :(得分:3)

在您的代码中,您尝试使用

命令
MissingSequence(D4:D10)

D4:D10在这种情况下没有任何意义(它实际上会认为D4D10是变量或函数/子例程,而:是命令分隔符) ,因此您需要使用Range函数将其转换为范围类型。

最好在任何范围前加上对范围所在的工作表的引用。

Public Sub CommandButton1_Click()
    'As this is a function that is being called, you need to catch the response.
    'Failing to do so will cause the compiler to think that is a subroutine
    'being called, and the `()` will force the parameters to be passed as values. 
    Range("B1") = MissingSequence(Range("D4:D10"))

    '/ This should be preferred. Sheet1 is just the example name.
    Range("B1") = MissingSequence(Sheet1.Range("D4:D10"))    
End Sub