#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
в своих циклах, поэтому вы постоянно повторяете цикл