Аргумент Excel VBA необязателен

#vba #excel #arguments

#vba #excel #аргументы

Вопрос:

Я пытаюсь написать набор процедур VBA в Excel. Цель процедуры — просмотреть данные в таблице, усреднить значения в определенном столбце, а затем выделить каждое значение, которое выше этого среднего.

Моя дилемма заключается в том, что я продолжаю получать ошибку «Аргумент не является необязательным» при попытке запустить свой код. Я полностью понимаю, на что обычно указывает эта ошибка. Однако я не могу понять, почему две строки, которые я передаю в процедуру, не принимаются? Заранее спасибо за любую помощь..

 Sub HighlightLarge()

    Call HighlightProductOrders(">", "vbYellow")

End Sub


Sub HighlightProductOrders(FunctionType As String, HighlightColor As String)

    'Delete all previous conditional formatting
     Cells.FormatConditions.Delete

'Make a variable to dynamically cover an entire table range
    Dim FormatTable As Range
    Set FormatTable = Range(Range("AllOrders").Offset(1, 0), Range("AllOrders").End(xlDown).End(xlToRight))

'Make a variable to calculate average order quantity
    Dim AverageQuantity As Double
    AverageQuantity = Application.WorksheetFunction.Average(FormatTable.Columns(2))

'Perform Highlighting based on Sub's params
    Dim i As Integer
    i = 1
    If FunctionType = ">" Then
        Do Until Range("AllOrders").Offset(i, 0) = ""
            If Range("AllOrders").Offset(i, 1) > AverageQuantity Then
                Range("AllOrders").Offset(i, 0).Interior.Color = HighlightColor
                Range("AllOrders").Offset(i, 1).Interior.Color = HighlightColor
                Range("AllOrders").Offset(i, 2).Interior.Color = HighlightColor
            End If
        Loop
    ElseIf FunctionType = "<" Then
        Do Until Range("AllOrders").Offset(i, 0) = ""
            If Range("AllOrders").Offset(i, 1) < AverageQuantity Then
                Range("AllOrders").Offset(i, 0).Interior.Color = HighlightColor
                Range("AllOrders").Offset(i, 1).Interior.Color = HighlightColor
                Range("AllOrders").Offset(i, 2).Interior.Color = HighlightColor
            End If
        Loop
    Else
        MsgBox "Parameters were not as expected.", vbCritical, "Error!"
        Exit Sub
    End If

End Sub
  

Комментарии:

1. Не связан, но вы не можете передать элемент перечисления («vbYellow») в виде строки. В какой строке ошибка?

2. Я не могу воссоздать это. Когда я настраиваю тест на имитацию, он работает просто отлично.

3. В нем не указана конкретная строка для этой ошибки, но, учитывая ее природу и то, что я прочитал в Интернете, я бы предположил, что ошибка будет во второй строке кода, где я вызываю процедуру.

4. Кайл, это отчасти согласуется с тем, в чем заключается мое замешательство, я не понимаю, почему этот код не будет работать.

5. Вы не увеличиваете значение i в своих циклах, поэтому вы постоянно повторяете цикл