2016-07-19 3 views
1

Я пытаюсь создать функцию vba в excel, которая сортирует столбец по цвету ячеек, а затем выводит результаты в другое место. Что у меня в настоящее время дает мне ошибкуСортировка по цвету и вывод в другое место

Function SortColor(colorSearchRange As Range, colorToSearch As Range, outputRange As Range) 
Dim colorValue As Integer 
Dim coloredItems(150) As String 
Dim index As Integer 

colorValue = colorToSearch.Interior.ColorIndex 
index = 0 
Set cell = colorSearchRange 
For Each cell In colorSearchRange 
    If cell.Interior.ColorIndex = colorValue Then 
     coloredItems(index) = cell.Value 
     index = index + 1 
    End If 
Next cell 

Range(outputRange & UBound(coloredItems) + 1) = WorksheetFunction.Transpose(coloredItems) 

End Function 

Я новичок в визуальном базовом. Будем очень благодарны за любую помощь.

+2

* В настоящее время выдается сообщение об ошибке * - какова ошибка и когда это происходит (какая строка)? ... на первый взгляд, эта строка 'Range (outputRange & UBound (coloredItems) + 1)' не является правильным sytnax для аргумента диапазона –

+0

@ScottHoltzman Я получаю сообщение об ошибке «значение, используемое в формуле, является неверными данными тип". Я не уверен, в какой строке это происходит, хотя ... Я прошел через отладчик, и похоже, что массив цветных элементов строит правильно, однако он не выводится надлежащим образом на outputRange –

+0

Это то, о чем говорил Скотт. Вы должны переписать эту финальную строку, потому что метод Range вызывается с неправильным типом аргумента. Я бы предложил 'Range (outputRange, outputRange.Offset (UBound (colorItems))), который даст вам все данные в столбце, начинающемся с outputRange (что, как я думаю, вы хотели сделать). – Mikegrann

ответ

1

вам нужно использовать что-то вроде:

outputRange.Resize(index) = WorksheetFunction.Transpose(coloredItems) 

также, что вам не нужно Set cell = colorSearchRange, поскольку cell собирается установить на каждой итерации цикла For Each cell In colorSearchRange

, наконец, ваш Function ISN» t возвращающ что-нибыдь так, котор вы можете сделать его Sub

все что могло привести к следующим следующим образом:

Sub SortColor(colorSearchRange As Range, colorToSearch As Range, outputRange As Range) 
    Dim colorValue As Long, index As Long 
    Dim coloredItems() As String 
    Dim cell As Range 

    ReDim coloredItems(1 To colorSearchRange.Rows.Count) As String 'dim your array to the maxiumum possible for the passed range 
    colorValue = colorToSearch.Interior.ColorIndex 
    For Each cell In colorSearchRange 
     If cell.Interior.ColorIndex = colorValue Then 
      index = index + 1 
      coloredItems(index) = cell.Value 
     End If 
    Next cell 
    outputRange.Resize(index) = WorksheetFunction.Transpose(coloredItems) 
End Sub 
Смежные вопросы