Как игнорировать код, который использует необязательный аргумент? - PullRequest
1 голос
/ 01 февраля 2020

У меня есть подпрограмма, которая принимает обязательный аргумент и необязательный:

Sub selectRange(txtbox As MSForms.TextBox, Optional lbl As MSForms.Label)

Я должен передать оба аргумента, или я получаю ошибку.

Ошибка понятна, если учесть, что подпрограмма содержит строки, которые непосредственно ссылаются на необязательный аргумент (lbl), например:

If Len(s) = 0 Then
    lbl.ForeColor = RGB(255, 0, 0)
    lbl.Font.Italic = True
    lbl.Caption = "{!this range doesn't contain values!}"
    Exit Sub
End If

На необязательный аргумент ссылаются во многих других местах кода.

Какие изменения я могу сделать, чтобы selectRange мог работать там, где передается только необходимый аргумент?

1 Ответ

2 голосов
/ 01 февраля 2020

Вам необходимо проверить, передано ли управление, а затем обработать его соответствующим образом. Например,

Sub selectRange(txtbox As MSForms.TextBox, Optional lbl As MSForms.Label)
    '
    '~~> Rest of the code which has nothing to do with the label
    '

    '~~> For label, Check it is passed
    If Not lbl Is Nothing Then
        If Len(s) = 0 Then
            lbl.ForeColor = RGB(255, 0, 0)
            lbl.Font.Italic = True
            lbl.Caption = "{!this range doesn't contain values!}"
            Exit Sub
        End If
    End If
End Sub

Вот как вы можете это проверить

Private Sub CommandButton1_Click()
    '<~~ This is will give the first message box
    selectRange TextBox1, Label1

    '<~~ This is will give the Second message box
    selectRange TextBox1
End Sub

Sub selectRange(txtbox As MSForms.TextBox, Optional lbl As MSForms.Label)
    '~~> For label, Check it is passed
    If Not lbl Is Nothing Then
        MsgBox "Label control is passed as a parameter"
    Else
        MsgBox "Label control is not passed as a parameter"
    End If
End Sub
...